30

我有一个安静的(脚手架生成的)控制器和投票模型,我只是想在视图中添加一个字段,单击该字段将为给定的汽车创建一个新的投票。它需要是一个 POST,我应该在 Rails 中这样做的方式是什么?

<% @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 %>
4

4 回答 4

41
<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 创建操作中可用。

于 2012-09-10T23:02:42.733 回答
31

Rails 5 + haml,例如:

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

关键是使用params键,然后在控制器中您将能够通过@some_var = params[:start_point]获得价值

于 2016-10-10T06:42:26.607 回答
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 的 id,这更加以 URL 为中心。这种组合让我很长一段时间都失望了。顺便说一下,您可以在 URL 参数哈希中添加您喜欢的任何其他参数 - 用作控制器中其他方法的参数,以采取更高级的操作。

于 2014-04-03T13:20:57.950 回答
0

您也可以像这样将参数作为参数传递给路径助手

<%= button_to '+', votes_path(car_id: card.id), method: 'post'  %>

您可以从控制器中获取会话 id,或者如果需要,仍将其传递给路径助手。

于 2020-10-21T11:57:23.067 回答