【发布时间】:2016-01-11 00:47:22
【问题描述】:
我一直在尝试解决这个问题,但还没有解决。如果有人可以让我知道如何做到这一点,或者如果有任何方法我可以使用render 方法来代替,将不胜感激(目前保留错误但重定向到错误的路径,如下所述......)
我有一个表单的自定义路由,当出现验证错误时我试图重定向回来:
get "clubs/sign_up/:plan_id", to: "clubs#new", as: :new_membership
以下是到目前为止我在控制器中的内容以及一些关于我尝试过的其他步骤的 cmets
clubs_controller.rb
def create
@membership = Membership.new(membership_params)
if @membership.save
redirect_to root_path
else
flash[:error] = "Please check form errors:"
redirect_to new_membership_path(session[:membership_plan_id]) #errors lost
# render action: 'new', plan_id: 'silver' # <<<Preserves errors but breaks path, renders: localhost:3000/clubs instead of .../clubs/sign_up/:plan_id
# session[:membership_errors] = @membership.errors #<<< Doesn't wotk either, getting a cookie overflow error when trying to pass errors to #new
return
end
end
def new
session[:membership_plan_id] = params[:plan_id]
@membership = Membership.new
end
【问题讨论】:
-
你能分享你的新方法吗?
-
@Tim 已更新,但内容不多。也意识到使用
render可能不起作用,因为您将在创建路径中呈现新的视图,这就是路径错误的原因。因此必须使用redirect_to 来完成 -
好的,我建议让渲染工作 - 这是正常的方式,渲染路径看起来很奇怪是正常的,渲染实际上并没有运行你的控制器操作,也没有使用你的路由,它只是调用模板。所以你描述的路径很好。诀窍是设置变量以匹配新方法在调用模板时保留它的条件。您是否在视图中使用任何其他变量,例如 param[:plan_I'd]?
-
@Tim 我在视图中使用了 param[:plan_id] 以及我的表单,但仅此而已
-
好的,最后一个问题,plan_id 是您的会员模型的一部分吗?
标签: ruby-on-rails ruby ruby-on-rails-4 ruby-2.0