ユーザーをフォームに送信して別のクラスを作成するボタンを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 が機能するのはなぜですか?
答えは、ルートを理解していないことだと思います:)
ありがとう