2017-09-18 17 views
1

ルーティングパスを修正するのに苦労しています。たとえば、新しいレッスンページを作成するためのパスを作成しようとしています。私はエラーが私は私がコースのモデルと授業モデルを持っていたとして、私のモデルが良くなかった作成方法を考えています以下のコードのルーティングエラーを修正するにはどうすればよいですか?

No route matches {:action=>"show", :controller=>"lessons"}, missing required keys: [:course_id, :id] 
 new_user_session GET /users/sign_in(.:format)      devise/sessions#new 
      user_session POST /users/sign_in(.:format)      devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy 
     new_user_password GET /users/password/new(.:format)     devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format)     devise/passwords#edit 
      user_password PATCH /users/password(.:format)      devise/passwords#update 
         PUT /users/password(.:format)      devise/passwords#update 
         POST /users/password(.:format)      devise/passwords#create 
cancel_user_registration GET /users/cancel(.:format)      devise/registrations#cancel 
    new_user_registration GET /users/sign_up(.:format)      devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)       devise/registrations#edit 
     user_registration PATCH /users(.:format)        devise/registrations#update 
         PUT /users(.:format)        devise/registrations#update 
         DELETE /users(.:format)        devise/registrations#destroy 
         POST /users(.:format)        devise/registrations#create 
        root GET /           devise/registrations#new 
      course_lessons GET /courses/:course_id/lessons(.:format)   lessons#index 
         POST /courses/:course_id/lessons(.:format)   lessons#create 
     new_course_lesson GET /courses/:course_id/lessons/new(.:format)  lessons#new 
     edit_course_lesson GET /courses/:course_id/lessons/:id/edit(.:format) lessons#edit 
      course_lesson GET /courses/:course_id/lessons/:id(.:format)  lessons#show 
         PATCH /courses/:course_id/lessons/:id(.:format)  lessons#update 
         PUT /courses/:course_id/lessons/:id(.:format)  lessons#update 
         DELETE /courses/:course_id/lessons/:id(.:format)  lessons#destroy 
       courses GET /courses(.:format)        courses#index 
         POST /courses(.:format)        courses#create 
       new_course GET /courses/new(.:format)       courses#new 
      edit_course GET /courses/:id/edit(.:format)     courses#edit 
        course GET /courses/:id(.:format)       courses#show 
         PATCH /courses/:id(.:format)       courses#update 
         PUT /courses/:id(.:format)       courses#update 
         DELETE /courses/:id(.:format)       courses#destroy 

を言ってもらう

<li><%= link_to "new lesson", course_lesson_path %></li> 

私はレッスンモデルの属性とその種のものを参考にしてコースを使用しました。あなたのケースでは

答えて

1

、新しい/courses/:course_id/lessons/newパスにリダイレクトリンクを作成したい場合、あなたは同じように、必要なcourse_idを渡しnew_course_lesson_pathを使用する必要があります。

<li><%= link_to "new lesson", new_course_lesson_path(id: 1) %></li> <!-- 1 as example --> 

あなたがmissing required keys: [:course_id, :id]エラーを参照してください理由course_lesson_pathためのparams内の2つの値を受け取るように定義されていますされています

/courses/:course_id/lessons/:id # :course_id and :id 

その場合には、それはなるだろう何かのように:

<li><%= link_to "new lesson", course_lesson_path(course_id: 1, id: 1) %></li> <!-- 1 and 1 as example --> 
+0

'new_course_lesson_path'メソッドは、':course_id'で呼び出す必要があります。引数をハッシュとして指定した場合は、 ':id'ではありません。代わりに@sbulatのように呼び出すこともできますが、読みやすさのためにあなたのやり方が好きです。 – DanneManne

+0

ありがとう!ソリューションは機能しましたが、私はコースIDをハードコードしたくないです。新しいコースを追加すると、そのコースに属するレッスンをどのように作成できるのでしょうか? – joshua

+0

はい、これらの値は一例に過ぎません。どのコースにもアクセスできるルートにいる場合は、すでにIDを持っているので、レッスンを作成するコースがあります。 –

1

course_lesson_pathあなたはそれが(もちろん以内)レッスンのためのアクションを表示するために指して使用されるように、すなわち、それはcourse_id(親のID)とレッスンidを必要とします。

は、そして、あなたは新しいレッスンのパスを指すようにしたいので、あなたはもちろん、例えば: <li><%= link_to "new lesson", new_course_lesson_path(@course_id) %></li>

あなたはそのレッスンを作成したい内のコースのIDであること@course_idの指定されたIDを持つnew_course_lesson_pathを使用する必要があります。

1
lessons_controller.rb 
# need to load course from controller 
def new 
    @course = Course.find(:course_id) 
end 

In your new.erb.html 

<li><%= link_to "new lesson", course_lesson_path(@course) %></li> 
+1

このコードスニペットをご利用いただきありがとうございます。適切な説明(* meta.stackexchange.com/q/114762)は、*なぜ*これが問題の良い解決策であるかを示すことで長期的な価値を向上させ、将来の読者にとって他の同様の質問。あなたの前提を含め、あなたの答えを[編集]して説明を加えてください。 –

関連する問題