Rails 7中create方法内redirect_to方法失效问题排查
问题原因及解决方案
核心问题是你用了save!方法——这个方法在模型验证失败时会直接抛出异常,而不是返回false,所以代码永远不会走到else分支。
修正后的create方法
把save!换成save(不带感叹号),它会在验证通过时返回true,失败时返回false,这样else分支就能正常触发:
def create @entertainment = Entertainment.new(entertainment_params) @entertainment.user = current_user if @entertainment.save flash.notice = "Expense created successfully" redirect_to entertainments_path else flash.alert = "表单提交失败:#{@entertainment.errors.full_messages.join(', ')}" redirect_to root_path end end
注意:建议先设置flash消息再执行redirect_to,这是更规范的写法(虽然Rails允许反过来,但顺序清晰更易维护)。
额外提示
- 你之前尝试的
render :index无效,也是因为save!抛出异常,代码根本没机会执行到render语句。 - 模型里的
CATEGORIES = CATEGORY.unshift(' ')会修改原常量CATEGORY的内容(unshift是原地修改数组),如果不想影响原分类列表,建议改成:
CATEGORIES = [' '] + CATEGORY
内容的提问来源于stack exchange,提问作者Edyta
相关产品推荐
相关产品推荐

