在 Rails 5 中使用 check_box 将值传递给控制器​​操作

Pass value to controller action with check_box in Rails5

目前,单击按钮时,按钮会将对象的 id 传递给控制器​​操作。

现在我想创建一个具有相同功能的复选框。

当前按钮代码:

<%= link_to "Display", note_display_path(:id => n.id), method: :post, class: 'btn btn-default' %>

尝试的复选框代码:

<%= check_box n, note_display_path(:id => n.id), method: :post %>

这就是我现在正在尝试的方法,但我在终端中没有看到任何 activity 单击时。

它在 index 模板上,因此有很多对象正在迭代和显示,@notes.each do |n|

但这不需要是异步的;页面刷新就ok了

这可能吗?

能够通过在 <% @notes.each do |n| %> 循环中设置 form_for 来部分解决。

然后隐藏提交按钮。

<%= form_for n, :url => { controller: :notes, action: :post_it, :id => n.id } do |f| %>
  <td> <%= f.check_box :posted %> </td>
  <td> <%= f.submit '', style: 'display:none' %> </td>
<% end %>

我还没有想到的改进版本可能会在单击 check_box 时提交,而无需按回车键。

我会尝试 "onclick" 和一些 javascript,可能是这样的:

<%= check_box_tag(:name, :value, false, {onclick: "sendNotes(id='#{n.id}')"%>

<script>
    function sendNotes(id) {
        window.location.search += "note_id="+id;
    }

</script>

然后你可以在你的控制器

中用params[:note_id]做一些事情