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

时间:2016-08-02 13:33:37

标签: ruby-on-rails ruby forms ruby-on-rails-3 checkbox

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

Illuminate\Queue\QueueManager:
  arguments:
    app: "@app"
  calls:
    - [ addConnector, ["@Illuminate\\Queue\Connector\NullConnector", "@some_callback"]]

但是,当我尝试将行 <% @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 %>

有解决方法吗?我之前看过多个帖子并尝试了各种选项但似乎没有任何帮助,包括:

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?

1 个答案:

答案 0 :(得分:1)

视图中有太多逻辑。我无法看到您的代码,但我可以给您一些建议:

在控制器中:

@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 %>