Rails:表单中的依赖字段

时间:2015-12-09 11:09:12

标签: ruby-on-rails

我想在我的应用程序中实现依赖字段。为此,我使用dependent-fields-rails宝石。我已使用this tutorial设置了所有内容。好事:它有效。的种类。在我的品牌模式中,我有品牌倾听,如阿迪达斯,耐克等......

现在我的两个挑战:

  1. 我不知道我必须填写data-option-value=" "字段,因为如果选择品牌而不是特定品牌,我想显示该类别的选择表格。如果我在字段(硬编码)中添加值data-option-value="Adidas",则只有在我选择"阿迪达斯"时才会出现category_select表单。来自品牌下拉列表。
  2. 我只想显示在步骤1中选择的品牌的匹配类别。我的群组模型还包含品牌记录,因此我可以将类别与品牌匹配。
  3. 更明确一点:

    • 品牌模特包含像阿迪达斯,耐克等公司......
    • 群组模型包含鞋类,衬衫等类别......

    这是我得到的:

    <div class="form-group">
      <%= f.label :brand %>
      <%= f.select(:brand, Brand.pluck(:company).uniq, {prompt:true}, {class: 'form-control'}) %>
    </div>
    <div class="form-group js-dependent-fields" data-select-id='warehouse_brand' data-option-value="Adidas">
      <%= f.label :category %>
      <%= f.collection_select(:category, Group.all, :brand, :name1, {prompt:true}, {class: 'form-control'}) %>
    </div>
    

    任何想法?非常感谢提前!

2 个答案:

答案 0 :(得分:0)

我认为一个品牌有很多团体。如果您不想使用硬编码值,请将js-dependent-fields放入循环中,如下面的代码所示。

<div class="form-group">
  <%= f.label :brand %>
  <%= f.select(:brand, Brand.pluck(:company).uniq, {prompt:true}, {class: 'form-control'}) %>
</div>
<% Brand.all.each do |b| %>
  <div class="form-group js-dependent-fields" data-option-value= "#{b.company}" data-select-id="warehouse_brand">
    <%= f.label :category %>
    <%= f.collection_select(:category, Group.where(brand_id: "#{b.id}"), :brand, :name1, {prompt:true}, {class: 'form-control'}) %>
  </div>
<% end %>

要仅显示匹配的类别,您可以编写一个选择与品牌相关的查询,如代码所示

Group.where(brand_id: "#{b.id}")

答案 1 :(得分:0)

这实际上有效:

<div class="form-group">
  <%= f.label :brand %>
  <%= f.select(:brand, Brand.pluck(:company).uniq, {prompt:true}, {class: 'form-control'}) %>
</div>
<% Brand.all.each do |b| %>
  <div class="form-group js-dependent-fields" data-option-value="<%= b.company %>" data-select-id="warehouse_brand">
    <%= f.label :category %>
    <%= f.collection_select(:category, Group.where(brand: b.company), :brand, :name1, {prompt:true}, {class: 'form-control'}) %>
  </div>
<% end %>