Ruby on rails Rails 3路由:包括带有根重定向的闪存参数
在Rails 3中,您可以通过config/routes.rb将根路径设置为重定向到别处:Ruby on rails Rails 3路由:包括带有根重定向的闪存参数,ruby-on-rails,ruby-on-rails-3,redirect,routing,Ruby On Rails,Ruby On Rails 3,Redirect,Routing,在Rails 3中,您可以通过config/routes.rb将根路径设置为重定向到别处: root :to => redirect("/dashboard") 这是可行的,只是它清除了传递给root的所有flash参数。如何通过重定向传递它们 更新:,即将路由声明重写为root:to=>redirect{p,req | req.flash.keep;“/dashboard”},对我有效。但有两件事我不明白: p代表什么,params 我尝试用do/end和换行符重写块: root :t
root :to => redirect("/dashboard")
这是可行的,只是它清除了传递给root的所有flash参数。如何通过重定向传递它们
更新:,即将路由声明重写为root:to=>redirect{p,req | req.flash.keep;“/dashboard”}
,对我有效。但有两件事我不明白:
do
/end
和换行符重写块:
root :to => redirect do |p, req|
req.flash.keep
"/dashboard"
end
但由于“ArgumentError:重定向参数不受支持”,此操作失败。为什么会这样你为什么不做点像这样的事
root :to => 'dashboard#index'
假设“/dashboard”导致仪表板控制器索引操作
更新
我的意思是,如果您真的想添加到显示在“/dashboard”的html.erb页面中
然后像这样做
<% if request.referer.scan('yoursitename').size == 0 %>
<%= create your own notice here %>
<% end %>
在您的原始控制器根区域中,您的操作是什么
这里真的很脏,但现在是凌晨2点,我得从伊利诺伊州开车去乔治亚州
希望这有助于使用
flash。保持
在路由文件中为重定向编写过程:
root :to => redirect { |p, req| req.flash.keep; "/dashboard" }
因此,将传递从普通重定向到根url的闪存参数:
redirect_to root_url, :notice => "test flash notice"
更新OP,并跟进您的答案。1。是的,p代表参数。2.这很有趣。看来我们这里有订单问题。如果我们把()
放在重定向do
块的周围,那么它就工作了。我总是使用{}
,因为如果块太复杂,这表明我们可能应该为此编写一个类。关于2,使用大括号和使用do/end定义块是不同的。Ruby iterprets如下:root(:to=>redirect)do#block传递给#root-可以避免括号-
使用大括号root:to=>redirect{#block传递给#redirect}
@Macario你是说没有括号,Ruby将块解释为传递给root
而不是redirect
?带括号或不带括号都是一样的,在这种情况下,使用do/end块将块传递给root,而使用花括号块将其传递给预定的#redirect。这是Ruby语法可以发挥作用的地方。
redirect_to root_url, :notice => "test flash notice"