将复选框值保存到数据库

时间:2014-10-08 13:19:11

标签: ruby-on-rails

我允许用户使用新表单和编辑表单中的复选框将联系人分组在一起:

<% current_user.contacts.all.each do |contact| %>
    <% checked = @group.contacts.include?(contact) %>
    <%= check_box_tag "contacts[]", contact.id, checked %>
    <%= f.label contact.name %>
<% end %>

直到最近,我才能在create action中使用以下代码来创建一个组:

def create
        @group = current_user.groups.new(group_params)
        @contacts = Contact.find(params[:contacts])
        @group.contacts << @contacts
        if @group.save
        ......
end

为了确保在更新操作期间已经检查过的值没有添加到组,我在表单中使用了隐藏标记。

<%= hidden_field_tag "contacts[]",'' %>
<% current_user.contacts.all.each do |contact| %>
    <% checked = @group.contacts.include?(contact) %>
    <%= check_box_tag "contacts[]", contact.id, checked %>
     <%= f.label contact.name %>
<% end %>

现在,我无法创建或更新组,因为hidden_​​field值也会传递。未找到有效记录:无法找到所有带有&#39;:(,3,4)的联系人(找到2个结果,但正在寻找3个)错误。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您希望隐藏字段标记为nil而不是空字符串

<%= hidden_field_tag "contacts[]", nil %>

但是当你使用rails 4时,collection_check_box可能是interest