Rails 3路由:包括带有根重定向的flash参数

时间:2012-02-16 06:52:10

标签: ruby-on-rails ruby-on-rails-3 redirect routing

在Rails 3中,您可以设置根路径以从config / routes.rb重定向到其他地方:

root :to => redirect("/dashboard")

这有效,除了它消除了传递给root的任何flash参数。你怎么能通过重定向传递它们?

更新: James Chen's solution,即将路线声明重写为root :to => redirect { |p, req| req.flash.keep; "/dashboard" },对我有用。但有两件事我不明白:

  1. p代表什么,params?
  2. 我尝试使用do / end和换行符重写块:

    root :to => redirect do |p, req|
      req.flash.keep
      "/dashboard"
    end
    

    但是由于“ArgumentError:不支持重定向参数”而失败。这是为什么?

2 个答案:

答案 0 :(得分:11)

使用flash.keep

在路线文件中为重定向写一个proc:

root :to => redirect { |p, req| req.flash.keep; "/dashboard" }

因此,从正常重定向到根URL的flash params将被传递:

redirect_to root_url, :notice => "test flash notice"

答案 1 :(得分:3)

为什么你不会做像

这样的事情

root:to => '仪表盘#索引'

假设'/ dashboard'导致仪表板控制器索引操作。

更新---

我的意思是,如果你真的想要,你可以添加到'/ dashboard'显示的html.erb页面

并做这样的事情

<% if request.referer.scan('yoursitename').size == 0 %>
 <%= create your own notice here %>
<% end %>

再次编辑......叹息..

忘了,你可以只是root:to =&gt; 'whateveryouroriginal#rootareawas' 然后就做:

redirect_to '/dashboard'

在你的原始控制器rootareawas行动中

这真的很脏但是凌晨2点我必须从伊利诺伊州开车去格鲁吉亚。

希望这有帮助