使用rails button_to helper生成隐藏的表单字段数据?

Tim*_*Tim 4 post ruby-on-rails helper

目前,我使用以下代码将params [:id]传递给line_items创建

<%= button_to 'Add to Cart', { controller: 'line_items', action: 'create', id: brick },  class: 'green radius nice button', method: :post, remote: true %>
Run Code Online (Sandbox Code Playgroud)

但是,它会在url查询中附加id参数,我不认为button_to要做.我想要的是通过隐藏表单字段传递id param.我可以在button_to或此问题的任何解决方法中执行此操作吗?

小智 7

从Rails 4.1.0开始,button_to现在有了额外的选项:params,它可以接收将被转换为隐藏字段的哈希.例如:

button_to 'Send Invitation', invitation_path(user), params: {'user[email]' => user.email}
Run Code Online (Sandbox Code Playgroud)

会给 :

<form action="/users/invitation" class="button_to" method="post">
   <div>
       <input type="submit" value="Resend">
       <input name="user[email]" type="hidden" value="user@yahoo.com">
   </div>
</form>
Run Code Online (Sandbox Code Playgroud)


Jos*_*cia 0

我在我的项目的模块中做了类似的事情:

首先,我添加了一个带有隐藏字段的表单:

<%= form_tag({:action => 'my_action'}, :id=>"item_form", :method => :post, :remote=>true) do%> 
  <%= hidden_field_tag :item_id, 0%>
<% end %>
Run Code Online (Sandbox Code Playgroud)

列表中的所有 mi 项目都会有一个 check_box_tag,其中包含项目 id:

<%= check_box_tag "item_ids", item.id, false,:id => item.id, :class => "my_fancy_class"%>
Run Code Online (Sandbox Code Playgroud)

当选择一个项目时,只需捕获事件,替换隐藏字段上的值并触发表单:

function( event, ui ) {
        $("#item_id").attr('value',ui.selected.id);
        $('form#item_form').submit();
      }
Run Code Online (Sandbox Code Playgroud)

如果你想渲染东西,只需将 action.js.erb 文件添加到控制器视图文件夹中,但那是另一回事。