まずはお手伝いをしてくれてありがとうございます。必須キーがありません:ネストされた要素を更新する場合は[:id]
私はhas_many project_tasksというプロジェクトモデルを持っているプロジェクトツールに取り組んでいます。 project_tasksはプロジェクトに属します。
私はプロジェクトタスクのための完全なアクションとしてマークしようとしていますが、パッチアクションでproject_task idを取得できないようです。ここで
は私のルートです: (私はあまりにもプロジェクトのための完全な作用を有するが、それは働い罰金であることに注意してください)
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
iを取得していますエラーがある: Noルート一致{:アクション=> "完全":コントローラ=> "project_tasks":ID =>ゼロ、:PROJECT_ID => "26"}必須欠落しますkeys:[:id]
link_toでは、2つの引数を追加するには、@ project(プロジェクトIDを取得する)とproject_task.idを追加します。 プロジェクトIDは正しく表示されていますが、project_task.idは表示されていないようです。 コントローラーのアクションを@project_task = ProjectTask.find(params [:id])に変更しようとしましたが、運が無難です。 (私はlink_toのいくつかの引数を使って試してみました) 私はそれを取得する方法がわかりませんが、あなたの1人が正しい方向に私を向けることを願っています。
ありがとうございます!
'rake routes'の出力で質問を更新できますか? –
はい、今更新されています。 –
"complete_project_project_task_path(@project、project_task.id)"の代わりに、次のパス(link_toの内側)を指定するとどうなりますか "/projects/#{@project.id}/project_tasks/#{project_task.id}/完了? 同じエラーが表示されますか? – matija