确定a:删除请求来自哪个页面

时间:2012-06-01 08:15:37

标签: ruby-on-rails request

我想知道如何确定a:删除请求来自哪个页面?例如,我有一个墙贴在用户的主页和显示页面上。当用户从主页删除帖子时,我希望将用户重定向到主页,而如果他从他的节目(个人资料)页面中删除它,我希望用户重定向回那里。但问题是,我无法区分它的来源。

我理解在:删除请求,你不能传入隐藏的值,因为它不是:post。我试过检查参数,但它们都是一样的。它们具有相同的方法:控制器和:动作即

{"_method"=>"delete", "authenticity_token"=>"xNsfq27sBrpssTO8sk0aAzzIu8cvnFJEZ30c17Q+BCM=",
"action"=>"destroy", "controller"=>"pub_messages", "id"=>"33"}

在我的摧毁行动中,我有:

def destroy
    @pub_message = PubMessage.find_by_id(params[:id])
    @pub_message.destroy
    redirect_to user_path(@pub_message.to_id)
end

但是我不想总是重定向回user_path,而是想重定向到root_path,但是当用户在主页上发出破坏行为时,却无法弄清楚。

我在视图中显示删除选项的地方是......

<% if current_user == feed_item.user or current_user == feed_item.to %>
   <%= link_to "delete", feed_item,     method: :delete,
                                        confirm: "You sure?",
                                        title: feed_item.content %>
<% end %>

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

redirect_to request.referer

或者

redirect_to :back

会将您重定向到上一页。

答案 1 :(得分:1)

您可redirect_to :back,如here所述。这将带您回到请求中的HTTP_REFERER。

答案 2 :(得分:1)

您可以使用redirect_to :back来使用Referer。

如果您担心许多访问者的浏览器未在请求中填写Referer标题,您可以处理来自params:

def destroy
  @pub_message = PubMessage.find_by_id(params[:id])
  @pub_message.destroy
  redirect_to user_path(@pub_message.to_id) and return if params[:from] == "profile"
  redirect_to home_path # no if to fallback
end

<% if current_user == feed_item.user or current_user == feed_item.to %>
  <%= link_to "delete", feed_path(feed_item, from: "profile"), method: :delete,
                                                               confirm: "You sure?",
                                                               title: feed_item.content %>
<% end %>

答案 3 :(得分:1)

可以传递额外的参数:

<%= link_to "delete", feed_item_path(feed_item, :foo => :bar),
                 method: :delete,
                 confirm: "You sure?",
                 title: feed_item.content %>

然后使用它们来决定重定向到哪里。

如果你不喜欢将它们作为查询参数,那么你可以设置不同的路由来为你传递这些参数。