Подтвердить что ты не робот

Внедрение области учета

В настоящее время в моем приложении у меня есть концепции проектов и пользователей. Теперь я хочу реализовать для них область учетных записей, чтобы как проекты, так и пользователи принадлежали учетной записи, а не ничего, в частности. Сделав это, я хотел бы охватить мои маршруты следующим образом:

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

Однако, реализуя маршрутизацию scope с именованным параметром, это изменяет способ выполнения хэндлеров маршрутизации, чтобы хелпер project_path теперь ожидал два параметра: один для параметра account_id и один для id параметр, что делает его примерно таким:

  project_path(current_account, project)

Это крошечное изменение scope требует от меня внесения больших изменений в приложение в контроллерах и представлениях, где я использую эти помощники путей.

Несомненно, конечно, конечно, есть ли чистый способ сделать это, не меняя каждого помощника маршрутизации в приложении?

4b9b3361

Ответ 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