我们想在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.
有人能指出我这种行为的任何好例子,或建议我们应该考虑什么?非常感谢。
答案 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 强>