Ruby on rails Rails:Rails应用程序控制器中的条件重定向
我在控制器中有一个动作,我从两个不同的视图调用它。在每种情况下,我都希望操作重定向回单击链接的页面。此刻我正在做这件事 在这个视图中,我正在传递这样一个参数Ruby on rails Rails:Rails应用程序控制器中的条件重定向,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在控制器中有一个动作,我从两个不同的视图调用它。在每种情况下,我都希望操作重定向回单击链接的页面。此刻我正在做这件事 在这个视图中,我正在传递这样一个参数 %a.showtooltip#wprofile{:href => idea_vote_up_path(@idea, :source => 'idea'), :title => 'Awesome idea - vote up !', } 在控制器中 if params[:source] == 'idea' redir
%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
这样做很好,但感觉不优雅,尤其是在几个动作中。有更好的方法吗?您可以用以下方法重写它:
redirect_to params[:source] == 'idea' ? idea : ideas_path
如果要重定向回页面(刷新当前页面)
将referer存储在会话中,如so
session[:previous]| |=request.referer
并将其用作重定向到会话。delete(:previous)我发现一个好方法是使用一个隐藏的输入值作为返回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 sups,所以请仔细检查,但逻辑应该是正确的。“.presence”处理您不希望自定义重定向到的情况,并且没有可指定的隐藏输入。您可能需要检查breadcrumbs实现。有几个宝石在那里。。。很容易找到回去的路。很好,正是我想要的
redirect_to params[:redirect_to].presence || idea_path(@idea)