2016-04-18 18 views
0

私はRailsの初心者です。私は入れ子にしようとしている。私は仕事があり、それぞれに仕事が割り当てられていますが、私は更新作業をしようとするとエラーが発生しますNo route matches [PATCH] "/ jobs/2/tasks"[PATCH] "/ jobs/2/tasks"と一致するルートはありません

私は経路を変更する必要がありますか?事前に

おかげ

マイルート

Rails.application.routes.draw do 
    root 'jobs#index' 
    resources :sessions 
    resources :users 


    resources :jobs do 
    resources :tasks 
    end 

    match 'jobs/:job_id/tasks', to: "jobs/tasks#index", via: :get 

get 'admin' => 'jobs#index' 
end 

タスク/フォーム

<%= form_for @task, url: job_tasks_path do |f| %> 
    <% if @task.errors.any? %> 
     <div id="error_explanation"> 
      <h2><%= pluralize(@task.errors.count, "error") %> prohibited this post from being saved:</h2> 

      <ul> 
      <% @task.errors.full_messages.each do |message| %> 
       <li><%= message %></li> 
      <% end %> 
      </ul> 
     </div> 
    <% end %> 

    <div class="field"> 
     <%= f.label :text %><br> 
     <%= f.text_area :text %> 
    </div> 
    <div class="actions"> 
     <%= f.submit %> 
    </div> 
<% end %> 

タスクコントローラのすべての

def update 
    respond_to do |format| 
     if @task.update(task_params) 
     format.html { redirect_to job_tasks_url, notice: 'Zadanie zostało pomyslnie zmienione.' } 
     format.json { render :show, status: :ok, location: @task } 
     else 
     format.html { render :edit } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

答えて

0

のようなものでなければなりません、あなたは熊手を実行することによって開始することができます端末内の経路。出力は次のようになります

  Prefix Verb URI Pattern         Controller#Action 
      job_tasks GET /jobs/:job_id/tasks(.:format)     tasks#index 
         POST /jobs/:job_id/tasks(.:format)     tasks#create 
     new_job_task GET /jobs/:job_id/tasks/new(.:format)    tasks#new 
     edit_job_task GET /jobs/:job_id/tasks/:id/edit(.:format)  tasks#edit 
      job_task GET /jobs/:job_id/tasks/:id(.:format)    tasks#show 
         PATCH /jobs/:job_id/tasks/:id(.:format)    tasks#update 
         PUT /jobs/:job_id/tasks/:id(.:format)    tasks#update 
         DELETE /jobs/:job_id/tasks/:id(.:format)    tasks#destroy 
       jobs GET /jobs(.:format)        jobs#index 
         POST /jobs(.:format)        jobs#create 
       new_job GET /jobs/new(.:format)       jobs#new 
      edit_job GET /jobs/:id/edit(.:format)      jobs#edit 
        job GET /jobs/:id(.:format)       jobs#show 
         PATCH /jobs/:id(.:format)       jobs#update 
         PUT /jobs/:id(.:format)       jobs#update 
         DELETE /jobs/:id(.:format)       jobs#destroy 

左側の列にはルート名が表示されます。ビューとコントローラで、job_tasks_pathまたはjob_tasks_urlとして参照できます。基本的に_pathまたは_urlを名前付きルートに追加します。次の列にHTTP動詞が表示されます。更新と破棄の場合は、それぞれ動詞PATCHまたはPUTを指定する必要があります。これは、どのようにrailsがそのリクエストをHTTPリクエストとマッチさせるかです。次の列にはuriの書式が表示され、右端の列にはそのルートがコントローラとアクションにどのように一致するかが表示されます。コロンは、パラメータを提供する必要があることを示します。

job_tasksは、タスクコントローラのインデックスアクションにリクエストを送信し、job_idパラメータを提供することを期待しています。このパラメータはparams [:job_id]でアクセスできます。

フォームに存在しないURIに投稿しようとしているというエラーが表示されています。 [PATCH] /ジョブ/ 2 /タスクは存在しませんが、[PATCH]「/ジョブ/ JOB_ID /タスク/:。あなた場合はidが

<%= form_for @task, url: job_tasks_path(@job) do |f| %> 

または

<%= form_for([@job, @task]) do |f| %> 
+0

ありがとうございました! – kisiel

0

まず、このルートは次のように必要とされていませんresources :tasks約すでに形で、あなたは仕事をmissigされ、

match 'jobs/:job_id/tasks', to: "jobs/tasks#index", via: :get 

第二に、あなたのためにそれを作成している:job_tasks_pathはこのエラーをデバッグする方法を理解するにはjob_tasks_path(@job)

+0

は非常にムンクありがとうございました! – kisiel

0

にごform_tagを変更しません

(あなたには、いくつかのコードを自分で更新する必要がありますので、少し古いです):ネストされたリソースについての詳細を学びたい、下記のリンクは、私が最初にあまりにもネストされたリソースをしようとしたとき、私は続い良い例ですネストを作成するレール3と足場リンクやリダイレクトを更新するにRubyで開発資源:
https://gist.github.com/jhjguxin/3074080

関連する問題