我想知道如何确定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 %>
我该如何解决这个问题?
答案 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 %>
然后使用它们来决定重定向到哪里。
如果你不喜欢将它们作为查询参数,那么你可以设置不同的路由来为你传递这些参数。