rails app中的条件重定向

时间:2014-08-14 18:49:01

标签: ruby-on-rails ruby

我在控制器中有一个动作,我从两个不同的视图调用。在每种情况下,我都希望操作重定向回到单击链接的页面。目前我正在这样做......

在视图中,我传递的参数如下......

%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

这样可以正常工作,但感觉并不优雅,特别是因为它最终会出现在一些动作中。还有更好的方法吗?

3 个答案:

答案 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”解决了您不希望自定义重定向到并且没有要指定的隐藏输入的情况。