【问题标题】:Simple form - checkboxes简单形式 - 复选框
【发布时间】:2016-01-14 20:17:08
【问题描述】:

我有模型搜索、颜色和颜色搜索:

def Search
   has_many :colors, :through => :colors_searches
end

def Color
   has_many :searches, :through => :colors_searhes
end

def ColorsSearch
   belongs_to :color
   belongs_to :search
end

在我看来,我希望有多个颜色复选框,当用户提交表单时,会创建一个新的搜索记录,其中包含 colors_serches 记录(一个用于选择的每种颜色)。

 <% Color.with_products.order(:name).each do |color| %>
     <% if color.name != 'none' %>
         <div class="checkbox">
             <input type="checkbox" name="search[color_id]" value="<%= color.id %>" id="color-checkbox-<%= color.id %>">
             <label for="color-checkbox-<%= color.id %>" style="background-color: <%= color.hex %>;"></label>
         </div>
     <% end %>
 <% end %>

两个问题:

  1. 如何在我的视图中重写上面的代码以使用简单的形式实现这一点?
  2. 控制器应该是什么样子的?

感谢您的想法, 米罗斯拉夫

更新

以下代码应该可以完成我正在寻找的大部分解决方案,剩下的唯一部分是:

  • 隐藏标签(标签:false,似乎没有按预期工作)
  • 根据颜色字段为每个生成的标签动态设置背景颜色。模型颜色有一个属性:hex,它存储颜色的十六进制标识,例如:#FFFFFF 表示白色等。

    <%= s.association :colors, collection: Color.with_products.order(:name), label: false, as: :check_boxes %>
    

我需要类似于此代码的内容,因此对于每种颜色,我会设置不同的背景颜色:

 <%= s.association :colors, collection: Color.with_products.order(:name), label: false, as: :check_boxes, :label_html => { :style => "background-color: #{:hex};" } %>

解决方案

所以我找到了两个解决方案(可能不是那么优雅,但它们有效):

  1. 我发现了如何为每个输入添加样式,如果您可以为输入呈现特定颜色,那么您可以轻松地应用 jQuery 为表格复制该样式。

我的看法:

<%= s.association :colors, collection: Color.collection_for_filter, label: false, as: :check_boxes %>

颜色模型:

def self.collection_for_filter
     array = []
     Color.with_products.each { |c| array << ["#{c.id}", "#{c.id}", { :style => "background-color: #{c.hex}" }] }
     array
end
  1. 我迭代所有颜色,并为每种颜色渲染一个输入和带有我需要的自定义值的标签。

" name="搜索[color_ids][]" id="search_color_ids_"> " for="search_color_ids_">
<% Color.with_products.each do |color| %>
<div class="checkbox">
    <input class="check_boxes optional" type="checkbox" value="<%= color.id %>" name="search[color_ids][]" id="search_color_ids_<%= color.id %>">
    <label class="collection_check_boxes" style="background-color: <%= color.hex %>" for="search_color_ids_<%= color.id %>">
    </label>
</div>
<% end %>

我选择了选项 2,因为它似乎是更好的解决方案,无需使用 JavaScript。

【问题讨论】:

    标签: ruby-on-rails checkbox simple-form


    【解决方案1】:

    以下代码应该可以完成我正在寻找的大部分解决方案,剩下的唯一部分是:

    • 隐藏标签(标签:false,似乎没有按预期工作)
    • 根据颜色字段为每个生成的标签动态设置背景颜色。模型Color有一个属性:hex,存储颜色的十六进制标识,例如:#FFFFFF表示白色等。

    请参阅更新以获取代码参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      相关资源
      最近更新 更多