2012-02-16 64 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點,我必須從伊利諾伊州開車到格魯吉亞。

希望這有助於