Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3路由:包括带有根重定向的闪存参数_Ruby On Rails_Ruby On Rails 3_Redirect_Routing - Fatal编程技术网

Ruby on rails Rails 3路由:包括带有根重定向的闪存参数

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

在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 :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"