прежде всего большое спасибо за то, что помогли мне.
Я работаю над инструментом проекта, у меня есть модель проекта has_many project_tasks. Project_tasks принадлежит проекту.
Я пытаюсь пометить как законченное действие для задач проекта, но мне кажется, что я не могу получить идентификатор project_task в действии патча.
Вот мои маршруты: (Обратите внимание, что у меня тоже есть полное действие для проекта, но оно работает нормально)
resources :projects do
resources :project_tasks do
member do
patch :complete
end
end
member do
patch :complete
end
end
Рейк-маршруты
complete_project_project_task PATCH /projects/:project_id/project_tasks/:id/complete(.:format) project_tasks#complete
project_project_tasks GET /projects/:project_id/project_tasks(.:format) project_tasks#index
POST /projects/:project_id/project_tasks(.:format) project_tasks#create
new_project_project_task GET /projects/:project_id/project_tasks/new(.:format) project_tasks#new
edit_project_project_task GET /projects/:project_id/project_tasks/:id/edit(.:format) project_tasks#edit
project_project_task GET /projects/:project_id/project_tasks/:id(.:format) project_tasks#show
PATCH /projects/:project_id/project_tasks/:id(.:format) project_tasks#update
PUT /projects/:project_id/project_tasks/:id(.:format) project_tasks#update
DELETE /projects/:project_id/project_tasks/:id(.:format) project_tasks#destroy
complete_project PATCH /projects/:id/complete(.:format) projects#complete
projects GET /projects(.:format) projects#index
POST /projects(.:format) projects#create
new_project GET /projects/new(.:format) projects#new
edit_project GET /projects/:id/edit(.:format) projects#edit
project GET /projects/:id(.:format) projects#show
PATCH /projects/:id(.:format) projects#update
PUT /projects/:id(.:format) projects#update
DELETE /projects/:id(.:format) projects#destroy
Вид:
<%= link_to '', complete_project_project_task_path(@project, project_task.id), class: "glyphicon glyphicon-ok", id: "complete-#{project_task.id}", method: :patch %>
И действие контроллера:
def complete
@project = Project.find(params[:project_id])
@project_task = project.project_task.find(params[:id])
if @project_task.completed_at.blank?
@project_task.update_attribute(:completed_at, Time.now)
flash[:success] = 'Task Completed!'
redirect_to root_path
else
@project_task.update_attribute(:completed_at, '')
flash[:info] = 'Task Updated!'
redirect_to root_path
end
end
Я получаю следующую ошибку: Нет совпадений маршрута {: action => "complete",: controller => "project_tasks",: id => nil,: project_id => "26"} отсутствуют необходимые ключи: [: id]
В link_to я добавляю 2 аргумента: @project (чтобы получить идентификатор проекта) и project_task.id. Кажется, я получаю правильный идентификатор проекта, но не project_task.id. Я попытался изменить действие контроллера на @project_task = ProjectTask.find (params [: id]), но безуспешно. (Я также пробовал несколько вещей с разными аргументами в link_to) Я не уверен, как это получить, но надеюсь, что один из вас может указать мне правильное направление.
Заранее спасибо!
rake routes
- person Dan Rubio   schedule 03.01.2017