目前在我的应用程序中,我有项目和用户的概念.现在我想为这些实现一个帐户范围,以便项目和用户都属于一个帐户,而不是特别是没有.通过这样做,我想像这样我的路线:
scope ":account_id" do resources :projects ... end
但是,通过使用命名参数实现路由选择范围,可以改变路由助手执行的方式,以便project_path路由助手现在可以使用两个参数,一个用于account_id参数,一个用于id参数,使其类似于此:
project_path(current_account,project)
这个微小的范围变化需要我在控制器和视图中使用这些路径帮助器的应用程序进行大量更改.
当然肯定的是,有一个干净的方法可以做到这一点,而不必更改应用程序中的每一个路由助手?
解决方法
使用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)
请注意,这在控制台中不起作用.