2011-01-06 2 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) 

Обратите внимание, что это не будет ork в консоли.

+1

Это работает в тех случаях, когда я попробовал его, спасибо! –

1

С Rails 3.0, манипулируя URL-адрес Params еще проще с url_options:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def url_options 
    { account_id: current_account.id }.merge(super) 
    end 
end 
Смежные вопросы