2011-05-23 57 views
0

新的編輯用「的link_to」

隨着resources :casesroutes.rb預期所有這些路由的助手工作問題(c是模型實例的實例):

cases_path   # Index action 
new_case_path  # New action 
case_path(c)  # Show action 
edit_case_path(c) # Edit action 

更改routes.rb這樣:

scope "/:area" do 
    resources :cases 
end 

兩個路由助手失敗(請參閱下面的錯誤):

cases_path   # OK 
new_case_path  # OK 
case_path(c)  # Fail 
edit_case_path(c) # Fail 

爲了使它工作,我需要改變過去的兩個幫手在:

cases_path         # OK 
new_case_path        # OK 
case_path(c, :area => params[:area])  # OK 
edit_case_path(c, :area => params[:area]) # OK 

爲什麼就沒有必要給:區域前兩個幫手,有必要對後兩個?這使得代碼混淆...

老問題

起初,我有這樣的routes.rb:

resources :cases 

,我可能會產生這種類型

example.com/cases/3 

顯示的鏈接ID = 3的情況:

link_to("Show this case", @case) 

然後我修改的routes.rb到:

scope "/:area" do 
    resources :cases 
end 

末端上方的link_to給我的錯誤

No route matches {:action=>"show", :controller=>"cases", :area=>#<Case id: 2, 

看來,軌道沒有得到:從參數自動區域。我可以解決這個問題迫使該地區建立一個鏈接與

link_to("Show this case", case_path(params[:area], @item)) 

獲得的鏈接

example.com/area1/cases/3 

,但我真的不喜歡它。難道我做錯了什麼?爲什麼軌道帶來控制器和行動,但忘了該地區?如果您指定area作爲參數

回答

0

此方法添加到您的ApplicationController:

def default_url_options(options={}) 
    {:area => params[:area]} 
end 

然後,您不必手動設置:區域選項在你的路由助手

+0

這工作,謝謝! – Lucamug 2011-05-24 17:28:23

+0

這在範圍內工作得很好,但是連接到範圍之外的路由(例如root_path)包含'?area = 1'作爲查詢字符串參數(因爲該參數不存在於路由中)。如何在連接範圍外連接時刪除參數? – dsample 2013-09-14 22:27:12

1

試試這個

link_to "Show this case", [:area, @case] 

編輯(去掉冒號)

scope "/area" do 
    resources :cases 
end 

EDIT 2

link_to "Show this case", case_path(@case, :area => :en) 

應始終傳遞它。

+0

這給出#錯誤'未定義的方法「area_case_path」 <#<類別:0x00000003682ad8>:0x0000000360cbd0>'。關鍵是我想讓Rails自動使用:區域。 – Lucamug 2011-05-23 22:07:53

+0

@Luke,試試我的編輯 – fl00r 2011-05-23 22:42:21

+0

冒號是必須的,看看[這裏](http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-url-params) – Lucamug 2011-05-24 06:55:56