我目前正在两个不同的视图上重新使用部分。
查看 A
视图 B
部分属于模型 A,但与模型 B 有关联,因此它也适用于模型 B。
它包含一个表单,当提交数据时,它总是将用户重定向到视图 A。但是,当我从视图 B 提交表单时,我希望被重定向回视图 B 而不是表单 A。
它现在重定向到视图 A 的原因是因为这是该表单所属的模型。因此,当发布时,它会与控制器 A 对话并使用重定向将用户带到 a_url。
如何告诉我的表单(或更多控制器操作)将用户重定向回他们来自的地方?
谢谢!
我目前正在两个不同的视图上重新使用部分。
查看 A
视图 B
部分属于模型 A,但与模型 B 有关联,因此它也适用于模型 B。
它包含一个表单,当提交数据时,它总是将用户重定向到视图 A。但是,当我从视图 B 提交表单时,我希望被重定向回视图 B 而不是表单 A。
它现在重定向到视图 A 的原因是因为这是该表单所属的模型。因此,当发布时,它会与控制器 A 对话并使用重定向将用户带到 a_url。
如何告诉我的表单(或更多控制器操作)将用户重定向回他们来自的地方?
谢谢!
解决了。
我在表单中添加了一个隐藏字段,其中包含渲染部分的控制器名称,然后我的 respond_to 块确定将用户发送到哪里。
查看代码:
<%= hidden_field_tag 'submitted_from', "#{controller.controller_name}" %>
我的控制器代码:
if params[:submitted_from] == 'A'
redirect_to a_url
else
redirect_to b_url
end
您可能希望将其放置在会话中,而不是使用隐藏标签:
session[:submitted_from] = new_model_url
在另一个动作中..
redirect_to(session[:submitted_from])
session[:submitted_from] = nil
切换表单变量非常容易,而伪造会话可能更难(但并非不可能)。如果是我的申请,我会走这条路。