1

我正在尝试在一个类中创建一个按钮,将用户发送到一个表单以创建另一个类。这是最简单的 has_many/belong_to 关系,但我很困惑。

两个类:事件和影响。事件有_许多影响。

创建从 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 来做到这一点

方法#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 执行时,没有传递任何参数。它调用了正确的方法,但参数以某种方式被删除(我不知道为什么/在哪里)。

方法 #2 当我更改我的 routes.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 有效?

我怀疑答案是我不懂路线:)

谢谢

4

0 回答 0