2012-02-16 62 views
3

在Rails 3,你可以设置你的根路径向右从配置/ routes.rb中其他地方重定向:Rails 3的路由:包括与根闪光灯PARAMS重定向

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

这工作,但它打掉任何闪光参数传递给根。你怎么能通过重定向传递他们?

更新: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:重定向的说法不支持”。为什么是这样?

+1

是的,p表示PARAMS。 2.这很有趣。似乎我们在这里有订单问题。如果我们把'()'放在'redirect do'块的周围,那么它就可以工作。我总是使用'{}',因为如果块太复杂,它表示我们应该为此写一个类。 – 2012-02-18 04:33:15

+0

关于2,使用花括号与do/end来定义块不同。 Ruby使用下面的语句:'root(:to => redirect)do#block传递给#root -parentheses可以被忽略-'使用大括号'root:to =>重定向{#block传递给#redirect}' – Macario 2013-01-31 19:31:04

+0

@马卡里奥你是说没有括号的话,Ruby会将该块解释为传递给'root'而不是'redirect'? – evanrmurphy 2013-01-31 20:00:40

回答

11

使用flash.keep

写出重定向一个进程在你的路由文件:

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

因此Flash PARAMS从正常转向到根URL将被传递:

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

更新了OP,并附上了答案。 – evanrmurphy 2012-02-17 15:05:09

3

为什么你不会只是像做

根:到=>“仪表盘#指数”

假设“/仪表盘”导致仪表板控制指标的行动。

更新---

我的意思是,如果你reallllly想,你可以添加到以“/仪表盘”

显示html.erb页,做这样的事情

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

再次编辑... ..叹息

忘了,你可以只根:到=> 'whateveryouroriginal#rootareawas' 然后就去做:

redirect_to '/dashboard' 

在whateveryouroriginal控制器rootareawas行动

这是非常脏,但它的凌晨2点,我必须从伊利诺伊州开车到格鲁吉亚。

希望这有助于