Вы можете создавать вложенные маршруты и при этом иметь возможность показывать все задачи независимо от проекта.Просто убедитесь, что у вас уже определен ресурс задачи, например
resources :projects do |p|
resources :tasks
end
resources :tasks
Теперь в индексах проектов или представлениях вы можете создать ссылку, например
link_to 'New Task', new_project_task_path(project)
Представление индекса задачи может быть немногосложно.Все зависит от того, как вы сортируете эти задачи.Если, например, вы показываете их отсортированными по проекту, вы можете создать ссылку, например
link_to 'New Task', new_project_task_path(task.project)
Что касается форм.В новом действии вы должны получить идентификатор из params и поместить его в объект задачи
if (params[:project_id])
@task.project_id = params[:project_id]
В виде формы вы можете создать скрытое поле, в котором будет сохранено это значение
f.hidden :project_id
Это будетзаставить его работать, но вы не сможете перейти к новому заданию без предоставления проекта.Лучшим решением было бы создать поле со всеми проектами.Для этого вам необходимо сделать следующее:
в models / project.rb
def getProjectsList
projects = Project.all
projects.map do |p|
[project.name, project_id]
end
end
в controllers / application_controller.rb
def find_projects
@projects = Project.new.getProjectsList
end
в controllers / tasks_controller.rb в начале
before_filter :find_projects, :only => [:new, :edit, :update, :create]
в представлениях / задачах / _form
f.select :project_id, @projects
Таким образом, вы всегда можете выбрать проект, и если в параметрах есть один, он будет уже выбран