Полагаю, вам нужны вложенные ресурсы.
resources :projects do
resources :documents
resources :registers
end
Теперь вы получите маршрутизацию следующим образом:
/projects/:project_id/documents
/projects/:project_id/registers
Вы сможете звонить params[:project_id]
внутриDocumentsController и RegistersController.Вам не понадобится сеанс для сохранения идентификатора проекта.Это будет доступно вам внутри URL.При создании приложения RESTful следует избегать сессий, насколько это возможно.
Единственное, что вам нужно сделать, это установить отношение внутри действия create обоих контроллеров:
def create
@document = Document.new(params[:document])
@document.project_id = params[:project_id]
# Now you save the document.
end
ЧтоМне нравится делать, это создание вспомогательного метода внутри ApplicationController, который получает текущий проект.
class ApplicationController < ActionController::Base
helper_method :current_project
private
def current_project
@current_project ||= Project.find(params[:project_id]) if params[:project_id].present?
end
end
Теперь вы можете сделать следующее внутри действия create:
def create
@document = Document.new(params[:document])
@document.project = current_project
# Now you save the document.
end
Вы будететакже сможете звонить current_project
внутри ваших просмотров для реестров и документов.Надеюсь, это вам поможет!
Обратитесь к руководству по Ruby on Rails для получения дополнительной информации о вложенных ресурсах: http://edgeguides.rubyonrails.org/routing.html#nested-resources