0

我有用于选择特定班级学生的复选框。但未选择的学生 ID 没有通过复选框。请帮助我。而且我还在下面包含了编码。

在视图中

<%= label_tag :students %>
  <button type="button" id="check_all">
    Check / Uncheck All
</button>

<table id = "mark"> 
    <tr>
        <td>
<table >
    <thead>
        <tr>
            <td><strong>Students List</strong></td>
        </tr>
    </thead>
    <tbody>
        <% @student.each do |i| %>  
            <tr>
                <td><%= check_box_tag :student, i.id %><%= i.first_name.capitalize %></td>
            </tr>
            <% end %>
    </tbody>
    </table>        
    <table>
        <tr>
            <td>

</tr>
</td>
</table>
</td>
</tr>
</table>

js文件

$('#check_all').on("click", function(){ $('input[type="checkbox"]').click(); });
4

2 回答 2

0

您至少可以通过两种方式实现这一目标。

一)从学生集合id中扣除提交的学生:

unselected_ids = @student.collect(&:id) - params[:student].collect(&:to_i)

二)使用javascript从客户端站点设置另一个隐藏字段

于 2013-08-13T06:14:56.397 回答
0

name您可以在复选框和零值之前 使用相同的隐藏输入。

<input type='hidden' value='0' name='student'>
<input type='checkbox' value='1' name='student'>  

当表单提交和复选框被选中时,先前0的值被1. 如果未选中复选框,则将0值发送到控制器。
只有当你有一个值,但你有很多 id 时,它才有效。并且您必须student[]在复选框中使用名称,如果您使用student名称,那么只有最后检查的值通过 in 在控制器中发送params[:student]

在这种情况下,使用可以在您的代码中使用此结构:

<% @student.each do |s| %>  
    <tr><td>
        <%= hidden_field_tag "student_all[]", s.id %>
        <%= check_box_tag "student[]", s.id %><%= s.first_name.capitalize %>
    </td></tr>
<% end %>  

在控制器中获得未经检查的学生,例如:

student_unchecked = params[:student_all] - params[:student]
于 2013-08-13T07:53:24.023 回答