1

ユーザーをフォームに送信して別のクラスを作成するボタンを1つのクラスに作成しようとしています。これは最も単純な has_many/belong_to 関係ですが、かなり混乱しています。

2 つのクラス: イベントとインパクト。イベント has_many 影響。

Events::Show から Impacts::New へのリンクを作成するのは簡単でした:

<%= link_to "Add impact", new_impact_path(event_id: @event.id) %> 

生成:

<a href="/impacts/new?event_id=5">Add impact</a> 

これにより、インパクト コントローラーにリクエストが送信され、params[:event_id] = 5 で new() メソッドが呼び出されます。

ただし、button_toでこれを行う方法を理解できていません

method #1 ルートを変更せずに、これは正しいと思いました。これは、params[:event_id] を使用して Impacts::New を呼び出します。

<%= button_to "New -loses ID", options = {:controller => "impacts", :action => "new", :event_id => @event.id }, html_options={:method => "get" }   %> 

生成する

<form action="/impacts/new?event_id=5" class="button_to" method="get"><div><input type="submit" value="New -loses ID"></div></form> 

routes.rb は以下を示します:

new_impact GET    /impacts/new(.:format)      impacts#new 

ただし、Impacts::New の実行時には、パラメーターは渡されません。それは正しいメソッドを呼び出しますが、paramはどういうわけかストライプアウトされます(理由/場所はわかりません)。

routes.rb を変更したときの方法 #2 :

resources :events do 
   resources :impacts 
end 

routes.rb が表示されるようになりました:

new_event_impact GET    /events/:event_id/impacts/new(.:format)      impacts#new 

生成されたコードは完全に異なりますが、機能します。

<form action="/events/5/impacts/new" class="button_to" method="get"><div><input type="submit" value="New -loses ID"></div></form> 

だから私の質問:

メソッド #1 でパラメータが失われるのはなぜですか?

方法 2 が機能するのはなぜですか?

答えは、ルートを理解していないことだと思います:)

ありがとう

4

0 に答える 0