2011-01-06 48 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 
相关问题