如果我要从不同的地方创建一些对象,例如:
如果成功/错误,我希望能够返回请求者页面并显示flash消息。
到目前为止,我得到了这个工作:
def store_location
session[:return_to] = request.url
end
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end
但我担心的是,如果我的团队中的其他人选择使用这段代码来解决类似问题。它可能会导致应用程序重定向到完全不同的位置。
有更好的方法吗?
答案 0 :(得分:2)
其中一个可能的解决方案是在表单中添加一个hidden_field,以便区分这两种情况。
我们假设你有Post模型,请考虑一个例子:
从显示页面:
<%= form_for @post do |f| %>
...
<%= hidden_field_tag :return_to, posts_path %>
<% end %>
第二种形式(即在索引页面上)可以保持不变,因此它不会传递任何值为&#34; return_to&#34;参数。如果没有值传递给&#34; return_to&#34;我们会检查一个控制器。然后将其视为&#34;从索引页面提交&#34;情况下。
在您的控制器中:
def create
...
redirect_to params[:return_to] || posts_path
end
答案 1 :(得分:1)
或者如何使用实际的请求引荐来源?
控制器:
def create
...some create logic
flash[:success] = 'YEEEY
redirect_to request.referer
rescue
flash[:error] = 'ERROR OCCURRED'
redirect_to request.referer
end