如何在复选框中传递所有student_id

时间:2013-08-13 06:00:46

标签: ruby-on-rails

我有一个选中特定班级学生的复选框。但未选中的学生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(); });

2 个答案:

答案 0 :(得分:0)

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

一)从学生收集ID中扣除提交的学生:

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

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

答案 1 :(得分:0)

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

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

当提交表单并选中复选框时,0值会覆盖1之前的值0。如果未选中复选框,则student[]值将发送给控制器 只有当你有一个值,但是你有很多id时才能使它工作。并且您必须在复选框中使用student名称,如果您使用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 %>

中的控制器中最后检查的值发送

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

student_unchecked = params[:student_all] - params[:student]

在控制器中取得未经检查的学生:

{{1}}