简单表格 - 复选框

时间:2016-01-14 20:17:09

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

我有模型Search,Color和ColorsSearch:

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

在我看来,我希望有多个颜色的checbox,当用户提交表单时,会使用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. 控制器应该如何?
  3. 感谢您的想法, 米罗

    更新

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

    • 隐藏标签(标签:false,似乎没有按预期工作)
    • 根据“颜色”字段为每个生成的标签动态设置背景颜色。模型Color有一个属性: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来复制表格的样式。
    2. 我的观点:

      <%= 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. 我迭代所有颜色,对于每种颜色,我使用我需要的自定义值渲染输入和标签。

          
      2. &#34;名称=&#34;搜索[color_ids] []&#34; ID =&#34; search_color_ids _&#34;&GT; &#34;用于=&#34; search_color_ids _&#34;&GT;
        <% 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。

1 个答案:

答案 0 :(得分:0)

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

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

请参阅UPDATE以获取代码参考。