0

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

我知道在 :delete 请求中,您不能传递隐藏值,因为它不是 :post。我试过检查参数,但它们最终都是一样的。它们具有相同的 :method、:controller 和 :action 即

{"_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

4 回答 4

2
redirect_to request.referer

或者

redirect_to :back

会将您重定向到上一页。

于 2012-06-01T08:21:32.837 回答
1

您可以redirect_to :back,如此所述。这会将您从请求中带回 HTTP_REFERER。

于 2012-06-01T08:19:51.633 回答
1

您可以使用redirect_to :backReferer。

如果您担心许多访问者的浏览器没有在请求中填写 Referer 标头,您可以处理 from 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 %>
于 2012-06-01T08:26:42.633 回答
1

可以传入额外的参数:

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

然后使用这些来决定您要重定向到的位置。

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

于 2012-06-01T12:00:27.863 回答