【问题标题】:How to add in multiple options for checkbox in Ruby on Rails?如何在 Ruby on Rails 中为复选框添加多个选项?
【发布时间】:2018-05-27 15:01:25
【问题描述】:

对于 Ruby on Rails 专家来说,这可能是一个超级简单的答案。我有一个表单,需要添加一个包含多个项目的复选框。我一直在搞乱以下代码,比我想承认的要长得多:

<%= form_for :lead, url: something, html: {id: 'product-form'} do |f|%>
<div class="row">
      <div class="col-md-12">
        <div class="form-group">
          <%= f.label :product%>
          <%= f.check_box :product, {multiple:true}, "option", "option2",   :class => 'form-control'%>
        </div>
      </div>
    </div>
<% end %>

使用此代码,我收到错误“参数数量错误(1..4 为 5)”。

基本上我只是希望有人能够选择多个选项。我还尝试了以下方法:

<div class="row">
      <div class="col-md-12">
        <div class="form-group">
          <%= f.label :product%>
          <%= f.check_box :option1, "Option1" :class => 'form-control'%>
          <%= f.check_box :option2, "Option2", :class => 'form-control'%>
        </div>
      </div>
    </div>

我得到了“Option1”的令人愉快的“未定义方法`merge':String”。将值与标签关联时我缺少什么?

【问题讨论】:

  • 除了接受的答案在 HTML 中而不是在 Ruby 中。这就是我问的原因。
  • 你试过阅读documentation吗?那里的第一条评论似乎是你想要的。
  • 我已经浏览了文档。尝试了一些示例。这就是我在这里发帖的原因。我试过 并得到多参数错误。第一条评论“有效”,因为它显示了多个选项,但实际上并不显示值。
  • @Jake:是的,复选框不显示任何内容。它们只是复选框。如果您需要每个复选框旁边的标题,那是您的工作。将每个复选框与 label_tag 或类似的东西配对。

标签: ruby-on-rails


【解决方案1】:

我使用 Rails 5.1.6,这就是我为复选框添加多个选项的方式。我还把它放在了一个下拉列表中。

在迁移文件中:

t.string :skills

在我的控制器“tasks_controller.rb”中:

def task_params
  params.require(:task).permit(:work_type, :title, :post, {skills: []})
end

在我的模型“task.rb”中我做了:

validates :skills, presence: true
serialize :skills, JSON

我在目录“app/model/concerns/”中创建了一个模块mobilephones_data.rb,它将复选框的所有选项保存为一个可以轻松编辑的数组。

在 app/model/concerns/mobilephones_data.rb 我写道:

 module Mobilenphones_Data
 Activities = [
    'Amazon Kindle',  'Blackberry',  'iPad',  'iPhone',  'Mobile Phone',  'Nokia',  
    'Palm',  'Samsung'
]
end

这会将模块数组中的所有数据作为复选框选项放入复选框下拉列表中。在我的表格中,我做了:

    <div class="card">
        <a class="card-link card-header" data-toggle="collapse" href="#collapseOne">
          Mobile Phones
        </a>

      <div id="collapseOne" class="collapse" data-parent="#accordion">
        <div class="card-body">
          <% Mobilenphones_Data::Activities.each do |activity| %>
            <div id="skill_list" class="col-lg-3 col-md-4 col-sm-12 col-12">
              <%= f.check_box :skills, { multiple: true }, activity, false %> 
              <%= activity %>
            </div>
          <% end %>
        </div>
      </div>
    </div> <!--bottom-->
</div>

在我看来“show.html.erb”:

<% @name_of_model.skills.each do |skill| %>
    <%= skill %>
<% end %>

【讨论】:

    【解决方案2】:

    为了后代:

    <div class="row">
        <div class="col-md-12">
          <div class="form-group">
          <%= f.label "Select a Product" %><br />
          <%= f.check_box(:option) %>
          <%= f.label(:mug, "Option") %><br />
          <%= f.check_box(:option2) %>
          <%= f.label(:mousepad, "Option2") %>
          </div>
        </div>
      </div>
    

    【讨论】:

      猜你喜欢
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      相关资源
      最近更新 更多