2011-01-06 88 views
12

目前在我的應用程序中,我有項目和用戶的概念。現在我想爲這些項目實施一個帳戶範圍,以便項目和用戶都屬於一個帳戶,而不是特別的東西。通過這樣做,我想的範圍我的路線是這樣的:實施帳戶範圍

scope ":account_id" do 
    resources :projects 
    ... 
end 

然而,通過實施路由scope與命名參數這改變路由的助手如何執行,使得project_path路由助手現在需要兩個參數,一個用於account_id參數,一個用於id參數,使得它是這樣的:

project_path(current_account, project) 

微小scope變化需要我做質量ive在控制器中的應用程序和使用這些路徑助手的視圖中進行更改。

當然,當然,有一個乾淨的方法可以做到這一點,而無需更改應用程序中的每個路由幫助程序?

回答

13

使用default_url_options哈希爲添加默認值:ACCOUNT_ID:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :set_default_account_id 

    def set_default_account_id 
    self.default_url_options[:account_id] = current_account 
    end 
end 

然後,您可以使用url傭工一個參數:

project_path(project) 

您可以覆蓋它在一個視圖通過傳遞:account_id作爲哈希參數到路由:

project_path(project, :account_id => other_account) 

請注意,這不會w ork在控制檯中。

+1

這工作,因爲我已經嘗試過的情況下,謝謝! – 2011-01-10 08:29:11

1

因爲Rails的3.0,操縱網址參數是即使url_options簡單:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def url_options 
    { account_id: current_account.id }.merge(super) 
    end 
end 
相關問題