我正在尝试在一个类中创建一个按钮,将用户发送到表单以创建另一个类。这是最简单的has_many / belongs_to关系,但我很困惑。
两个类:事件和影响。事件has_many影响。
创建一个从Events :: Show to Impacts :: New的链接很简单:
<%= link_to "Add impact", new_impact_path(event_id: @event.id) %>
生成:
<a href="/impacts/new?event_id=5">Add impact</a>
这会向impact控制器发送一个请求,并使用params调用new()方法[:event_id] = 5
但是我无法通过button_to
了解如何执行此操作方法#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以某种方式被条带化(我不知道为什么/在哪里)。
方法#2 当我改变我的路线时.rb:
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方法有效?
我怀疑答案是我不了解路线:)
感谢