如何在Rails 3.2索引页面中为每一行添加一个复选框?

时间:2014-06-06 02:27:21

标签: jquery ruby-on-rails ruby-on-rails-3 checkbox erb

我们想在Rails索引页面的每一行添加一个复选框来标记该行。此复选框不是对象的一部分(数据库中没有复选框布尔值)。当索引页面显示时,用户可以选中该框以在以下过程中触发该行的事件:

#objects/checkbox_index.html.erb    
<table>
  <tr>
    <th>CheckBox</th>
    <th>Object Name</th>
    <th>Object ID</th>
  </tr>
  <%= @objects.each do |obj| %>
    <tr>
      <td><%= checkbox %></td>
      <td><%= obj.name %></td>
      <td><%= obj.id %></td>
    </tr>
  <% end %>
</table>

在控制器中,过程如下:

@objects.each do |obj|
  some_event if obj.checked
end

有几个问题我们不太明白:

1. How to declare an array checkbox variable on the form and link it to each row of obj? We have been using `attr_accessor` to declare var for a form. 
2. How to retrieve each row on checkbox_index form and pass them back to controller?  We are using simple_form for new/edit. 

有人能指出我这种行为的任何好例子,或建议我们应该考虑什么?非常感谢。

3 个答案:

答案 0 :(得分:1)

对此的一个解决方案是将Javascript事件侦听器添加到不属于表单的复选框。如果要触发的操作是数据库调用,则可以使用ajax执行此操作。没有坐下来编写所有的javascript代码,Ruby和伪javascript代码可能看起来像这样:

<强>红宝石

<% @objects.each do |obj| %>
    <%= check_box_tag, class: "checkbox" %>
<% end %>

<强>使用Javascript / JQuery的

$('#checkbox').on change {
    if selected == selected
        do what you are trying to do on $(this).element (like an ajax call)
    else
        undo what you did
    end
}

答案 1 :(得分:1)

用于标识您应使用&lt;%= check_box_tag&#34; object_ids []&#34;,object.id%&gt; 的每个复选框,它将返回您的控制器和数组您检查的对象的所有ID都会提交,请查看Ryan Bates的视频,这是我学习此技术的地方,问候

答案 2 :(得分:1)

如果您需要的是获取信息/效果的方法,则单击一个复选框,这可能会有所帮助。

JS:

$('yourTableHere').on('click', 'input', function(){
    $(this).parentsUntil('tr').toggleClass('active'); // any functionality can go here
});

<强> Demo Fiddle