You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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允许反过来,但顺序清晰更易维护)。

额外提示

  1. 你之前尝试的render :index无效,也是因为save!抛出异常,代码根本没机会执行到render语句。
  2. 模型里的CATEGORIES = CATEGORY.unshift(' ')会修改原常量CATEGORY的内容(unshift是原地修改数组),如果不想影响原分类列表,建议改成:
CATEGORIES = [' '] + CATEGORY

内容的提问来源于stack exchange,提问作者Edyta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:59:59