我正在使用Dependent-Fields gem。它基本上是JavaScript,它会对" js-dependent-fields"做出反应。类。以下代码按预期工作:
<div class="panel-body">
<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 %>
问题是循环使用style="display:none;"
创建了适当数量的div(每个)。但是当我想保存表单时,Rails会感到困惑,因为有多个&#34;类别&#34;表格领域。结果是:&#34;类别&#34;中没有任何内容被保存。记录。 HTML输出:
<div class="form-group">
<label for="warehouse_brand">Brand</label>
<select class="form-control" name="warehouse[brand]" id="warehouse_brand">
<option selected="selected" value="Adidas">Adidas</option>
<option value="Nike">Nike</option>
<option value="Fila">Fila</option>
</div>
<div class="form-group js-dependent-fields" data-option-value="Adidas" data-select-id="warehouse_brand" style="">
<label for="warehouse_category">Category</label>
<select class="form-control" name="warehouse[category]" id="warehouse_category">
<option value="">Please select</option>
<option value="Adidas">Shoes</option>
<option value="Adidas">Shirts</option>
</select>
</div>
<div class="form-group js-dependent-fields" data-option-value="Nike" data-select-id="warehouse_brand" style="display: none;">
<label for="warehouse_category">Category</label>
<select class="form-control" name="warehouse[category]" id="warehouse_category">
<option value="">Please select</option>
</select>
</div>
<div class="form-group js-dependent-fields" data-option-value="Fila" data-select-id="warehouse_brand" style="display: none;">
<label for="warehouse_category">Category</label>
<select class="form-control" name="warehouse[category]" id="warehouse_category">
<option value="">Please select</option>
</select>
</div>
我猜Rails不知道由于循环而必须保存哪个表单字段(遗憾的是必须这样)。你有解决方案吗?
答案 0 :(得分:3)
禁止使用表单提交字段。您必须禁用字段。 e.g。
$("input").prop('disabled', true);
它将禁用这些字段,并且这些字段不会随表单一起提交。 为了启用字段,请使用此
$("input").prop('disabled', false);
在你的情况下,你应该试试这个。
$( "#submit_form" ).click(function() {
$('.js-dependent-fields:hidden').prop('disabled', true);
});
您的代码将有效。只有在上面的代码中提供了正确的选择器。或者您可以通过
清空内容$('.js-dependent-fields:hidden').html('');
答案 1 :(得分:2)
Rails有一个用于处理嵌套表单的内置机制。
让我们说:
class Company < ActiveRecord::Base
has_many :brands
accepts_nested_attributes_for :brands
end
class Brand < ActiveRecord::Base
belongs_to :company
end
class CompaniesController < ApplicationController
def new
@company = Company.new
@company.brands.new # seeds the form with a new record for brands
end
def edit
@company = Company.find(params[:id])
@company.brands.new # seeds the form with a new record for brands
end
end
自公司accepts_nested_attributes_for :brands
以来,我们可以通过params[:company][:brands_attributes]
同时创建公司和品牌。幸运的是,我们不必手动执行此操作。
<%= form_for(@company) do |f| %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<fieldset>
<legend>Brands</legend>
<%= f.fields_for(:brands) do |brand_fields| %>
<%= brand_fields.label :foo %>
<%= brand_fields.text_field :foo %>
<% end %>
</fieldset>
<% end %>
这将使用名称属性的数组格式:
<input name="company[brands_attributes][0][foo]" #...
答案 2 :(得分:0)
Dependent-Fields gem仅将未选择的字段设置为隐藏。它将以下css样式添加到字段
// ...
trace ("Times up");
secTimer.stop();
gotoAndPlay(525);
// ...
即使显示设置为&#39;无,也会提交字段。在现代浏览器中。我认为以下代码可以解决问题。
style="display: none;"
此代码有助于将正确的参数发送到操作。