【发布时间】:2012-03-07 14:05:03
【问题描述】:
在 Rails 3 中,您可以设置根路径以直接从 config/routes.rb 重定向到其他地方:
root :to => redirect("/dashboard")
这可行,只是它会清除所有传递给 root 的 flash 参数。如何通过重定向传递它们?
更新:James Chen's solution,即将路由声明重写为root :to => redirect { |p, req| req.flash.keep; "/dashboard" },对我有用。但是有两点我不明白:
-
p代表什么,参数? -
我尝试使用
do/end和换行符重写该块:root :to => redirect do |p, req| req.flash.keep "/dashboard" end但这会失败,并显示“ArgumentError:不支持重定向参数”。这是为什么呢?
【问题讨论】:
-
1.是的,p 代表参数。 2.这很有趣。看来我们这里有订单问题。如果我们将
()放在redirect do块周围,那么它就可以工作。我总是使用{},因为如果块太复杂,这表明我们应该为此编写一个类。 -
关于2,使用花括号和使用do/end定义块是不一样的。 Ruby iterprets 如下:
root(:to => redirect) do # block passed to #root -parentheses can be obviated-使用花括号时root :to => redirect{ #block passed to #redirect } -
@Macario 你是说没有括号,Ruby 将块解释为传递给
root而不是redirect? -
带或不带括号是相同的,在这种情况下,使用 do/end 块将块传递给根,而使用花括号块将其传递给 #redirect 。这里是 Ruby 语法可以咬人的地方。
标签: ruby-on-rails ruby-on-rails-3 redirect routing