Внедрение области учета
В настоящее время в моем приложении у меня есть концепции проектов и пользователей. Теперь я хочу реализовать для них область учетных записей, чтобы как проекты, так и пользователи принадлежали учетной записи, а не ничего, в частности. Сделав это, я хотел бы охватить мои маршруты следующим образом:
scope ":account_id" do
resources :projects
...
end
Однако, реализуя маршрутизацию scope
с именованным параметром, это изменяет способ выполнения хэндлеров маршрутизации, чтобы хелпер project_path
теперь ожидал два параметра: один для параметра account_id
и один для id
параметр, что делает его примерно таким:
project_path(current_account, project)
Это крошечное изменение scope
требует от меня внесения больших изменений в приложение в контроллерах и представлениях, где я использую эти помощники путей.
Несомненно, конечно, конечно, есть ли чистый способ сделать это, не меняя каждого помощника маршрутизации в приложении?
Ответы
Ответ 1
Используйте хэш-значение 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)
Обратите внимание, что это не будет работать в консоли.
Ответ 2
Поскольку Rails 3.0, управление параметрами url еще проще с url_options:
class ApplicationController < ActionController::Base
protect_from_forgery
def url_options
{ account_id: current_account.id }.merge(super)
end
end