【问题标题】:Ruby on Rails: Add a check box for each value in databaseRuby on Rails:为数据库中的每个值添加一个复选框
【发布时间】:2016-12-07 21:34:10
【问题描述】:

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

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

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

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

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

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?

【问题讨论】:

  • 由 chumakoff 解决,他解释说我需要将数组更改为字符串

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


【解决方案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 %>

编辑

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

有两种方法可以做到。

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

【讨论】:

  • 感谢您的建议,但还是不行
  • contact[to]参数需要传入什么?
  • 我需要传递电子邮件地址,因此我在上面尝试contact.email
  • 您想收到一系列电子邮件吗?还是几封电子邮件作为一个字符串?
  • 一种,我的目标是让用户选择 4 个电子邮件地址,然后将这些电子邮件地址连接成一个并保存在数据库中,例如"1@a.com;2@b.com;3@c.com;4@d.com"
猜你喜欢
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2016-12-08
相关资源
最近更新 更多