我在控制器中有一个动作,我从两个不同的视图调用。在每种情况下,我都希望操作重定向回到单击链接的页面。目前我正在这样做......
在视图中,我传递的参数如下......
%a.showtooltip#wprofile{:href => idea_vote_up_path(@idea, :source => 'idea'), :title => 'Awesome idea - vote up !', }
并在控制器......
if params[:source] == 'idea'
redirect_to idea
else
redirect_to ideas_path
end
这样可以正常工作,但感觉并不优雅,特别是因为它最终会出现在一些动作中。还有更好的方法吗?
答案 0 :(得分:1)
您可以通过以下方式重写它:
redirect_to params[:source] == 'idea' ? idea : ideas_path
如果要重定向回页面(刷新当前页面)
redirect_to request.referer
答案 1 :(得分:1)
将引荐来源存储在会话中session[:previous] ||= request.referer
,并将其用作redirect_to session.delete(:previous)
答案 2 :(得分:0)
我发现一种好方法是使用您想要作为返回URL的值的隐藏输入。似乎是一个易于管理的解决方案,对我有用。这样,您可以在1或1000个视图中创建隐藏的输入,并在控制器中使用一行代码来进行重定向。我无法立即想到这种方法的弊端。
形式
hidden_field_tag(:redirect_to, params[:redirect_to]) # in the form that is to be submitted, value determined by a query string
hidden_field_tag(:redirect_to, "/a/direct/value") # in the form, value specified directly
在控制器中
redirect_to params[:redirect_to].presence || idea_path(@idea)
没有测试代码,也不了解ruby是否很好,所以请仔细检查,但逻辑应该成立。 “ .presence”解决了您不希望自定义重定向到并且没有要指定的隐藏输入的情况。