存储请求发起位置的好方法 rails
Good way of storing the location from which request originated rails
如果我要从不同的地方创建一些对象,例如:
- 我正在从我的索引页面创建对象(POST 以创建控制器的方法)
- 我正在从我的显示页面创建对象(POST 以创建控制器的方法)
在 success/error 的情况下,我希望能够 return 到请求者页面并显示即显消息。
到目前为止我已经开始工作了:
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
但我担心的是,如果我的团队中的其他人选择将这段代码用于类似情况怎么办。它可能会导致应用程序重定向到完全不同的位置。
有更好的方法吗?
一种可能的解决方案是在表格中添加一个 hidden_field 以区分这两种情况。
假设您有 Post 个模型,考虑一个例子:
来自显示页面:
<%= form_for @post do |f| %>
...
<%= hidden_field_tag :return_to, posts_path %>
<% end %>
第二种形式(在索引页上)可以保持不变,因此它不会为 "return_to" 参数传递任何值。如果没有值传递给 "return_to",我们将检查控制器,然后将其视为 "Submit from index page" 情况。
在你的控制器中:
def create
...
redirect_to params[:return_to] || posts_path
end
或者使用实际请求引荐来源网址如何?
控制器:
def create
...some create logic
flash[:success] = 'YEEEY
redirect_to request.referer
rescue
flash[:error] = 'ERROR OCCURRED'
redirect_to request.referer
end
如果我要从不同的地方创建一些对象,例如:
- 我正在从我的索引页面创建对象(POST 以创建控制器的方法)
- 我正在从我的显示页面创建对象(POST 以创建控制器的方法)
在 success/error 的情况下,我希望能够 return 到请求者页面并显示即显消息。
到目前为止我已经开始工作了:
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
但我担心的是,如果我的团队中的其他人选择将这段代码用于类似情况怎么办。它可能会导致应用程序重定向到完全不同的位置。
有更好的方法吗?
一种可能的解决方案是在表格中添加一个 hidden_field 以区分这两种情况。
假设您有 Post 个模型,考虑一个例子:
来自显示页面:
<%= form_for @post do |f| %>
...
<%= hidden_field_tag :return_to, posts_path %>
<% end %>
第二种形式(在索引页上)可以保持不变,因此它不会为 "return_to" 参数传递任何值。如果没有值传递给 "return_to",我们将检查控制器,然后将其视为 "Submit from index page" 情况。
在你的控制器中:
def create
...
redirect_to params[:return_to] || posts_path
end
或者使用实际请求引荐来源网址如何?
控制器:
def create
...some create logic
flash[:success] = 'YEEEY
redirect_to request.referer
rescue
flash[:error] = 'ERROR OCCURRED'
redirect_to request.referer
end