Ruby on Rails: 为数据库中的每个值添加一个复选框

Ruby on Rails: Add a check box for each value in database

我正在尝试在显示用户所有联系人的表单上显示复选框,以便用户可以 select 所需的联系人。到目前为止,我已经在表单上完成了此操作,该表单显示了复选框但没有值:

    <% @contacts.each do |contact| %>
        <% if contact.user.id == User.find(session[:user_id]).id %>
            <%= f.check_box :to %>
        <% end %>
    <% end %>

但是当我尝试将行 <%= f.check_box :to %> 更改为 <%= f.check_box :to, contact.email %> 以显示联系人的电子邮件地址时,我收到错误消息:

undefined method `merge' for "email@123.com":String

有办法解决这个问题吗?我之前查看过多个帖子并尝试了各种选项,但 none 似乎有所帮助,包括:

Ruby on rails f.label for a check box http://apidock.com/rails/v4.0.2/ActionView/Helpers/FormOptionsHelper/collection_check_boxes How to add a checkbox for each row in Rails 3.2 index page?

你的观点逻辑过多。我看不到你的代码,但我可以给你一些建议:

在控制器中:

@contacts_of_current_user = @contacts.where(user_id: session[:user_id])

查看:

<% @contacts_of_current_user.each do |contact| %>
      <%= f.label :to, contact.email %>
          <%= f.check_box :to, {}, contact.email %>
      <% end %>
<% end %>

编辑

从评论中我了解到您需要获取一串选定的电子邮件。

有两种方法可以做到。

1) 以某种方式在客户端构建此字符串 (JavaScript)

2) 或者传递一组电子邮件,然后在服务器上将它们连接成单个字符串

我可以向您展示如何传递数组:

<%= f.collection_check_boxes(:to, @contacts, :email, :email ) %>

或者您可以手动完成,如下所示:

  <% @contacts_of_current_user.each do |contact| %>
      <%= f.label :to, contact.email %>
          <%= check_box_tag 'to[]', contact.email %>
      <% end %>
<% end %>