存储请求发起位置的好方法 rails

Good way of storing the location from which request originated rails

如果我要从不同的地方创建一些对象,例如:

  1. 我正在从我的索引页面创建对象(PO​​ST 以创建控制器的方法)
  2. 我正在从我的显示页面创建对象(PO​​ST 以创建控制器的方法)

在 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