Rails link_to或button_to发布带参数的请求

时间:2012-09-10 22:10:33

标签: ruby-on-rails ruby-on-rails-3

我有一个宁静的(脚手架生成的)控制器和投票模型,我只是想在视图中添加一个字段,点击后,将为给定的汽车创建一个新的投票。它需要是一个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 个答案:

答案 0 :(得分:30)

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

这将使VotesController创建动作中的params [:car_id]和params [:user_id]可用。

答案 1 :(得分:23)

Rails 5 + haml,例如:

    <?php $samples=$data['options'][0][product_option_value]; 



    $product_image = array_column($samples, 'product_image');
    echo'<pre>'; print_r($product_image );  

    ?>

关键是使用 params 键,然后在控制器中你可以通过 @some_var = params [:start_point]

获得价值

答案 2 :(得分:0)

<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参数哈希中添加您喜欢的任何其他参数 - 用作控制器中其他方法的参数,以采取更高级的操作。

答案 3 :(得分:0)

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

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

您可以从控制器中获取会话ID,也可以根据需要将其传递给路径助手。