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)