2012-09-10 61 views
19

我有一個寧靜的(腳手架生成的)控制器和投票模型,我只是試圖添加一個字段到視圖中,點擊後,會爲給定的汽車創建一個新的投票。它需要是一個POST,我應該如何在rails中這樣做?Rails link_to或button_to用參數發送請求

<% @cars.each do |car| %> 
    <tr> 
    <td><%= button_to '+', {:controller => "votes", :action => "create"}, :car_id => car.id, :user_id=> session[:user_id] , :method=>:post %></td> 
    <td><%= car.votes.count %></td> 
    <td><%= car.name %></td> 
    <td><%= car.code %></td> 
    <td><%= car.album %></td> 
<% end %> 

回答

25
<td><%= button_to '+', {:controller => "votes", :action => "create", :car_id => car.id, :user_id=> session[:user_id]} , :method=>:post %></td> 

這將使PARAMS [:car_id],而params [:USER_ID]在VotesController可創建行動。

1
<td><%= button_to '+', {:controller => "votes", :action => "create", :car_id => car.id, :user_id=> session[:user_id]} , {:method=>:post} %></td> 

Erez是正確的 - 在這種情況下,第一個散列是「URL參數」散列,它控制按鈕發送請求的URL。第二個散列是「HTML參數」散列,它控制按鈕的外觀以及提交方法(通過在生成的HTML中添加隱藏字段)。

這裏令人困惑的事情是,URL參數要求您以控制器爲中心的方式指定控制器和操作,但隨後需要將URL傳遞給更多以URL爲中心的URL。很長時間以來,這種組合讓我失望了。您可以在URL參數哈希中添加您喜歡的任何附加參數 - 作爲控制器中其他方法的參數,以採取更高級的操作。

16

導軌5 + HAML,例如:

= button_to "smth", some_path, method: :get, params: { start_point: 3.month.ago } 

的關鍵是使用PARAMS鍵,則在控制器,你將能夠經由@some_var =參數獲得的值[:start_point]