Cocoon、Bootstrap_Form_For 和 PostgreSQL 更新除布尔复选框之外的所有字段
Cocoon, Bootstrap_Form_For and PostgreSQL updating all fields but boolean check box
我在 rails 4 应用程序中使用 Cocoon Gem 和 Bootstrap_Form_for。一切正常,创建和更新我的所有字段都没有问题,除非我尝试更改已设置的布尔字段。
下面是我的代码,非常感谢您的帮助。
products_controller:
def update
respond_to do |format|
if @product.update(product_params)
format.html { redirect_to @product, notice: 'Product was successfully updated.' }
format.json { render :show, status: :ok, location: @product }
else
format.html { render :edit }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
categories_controller:
def create
@category = Category.new(category_params)
respond_to do |format|
if @category.save
format.html { redirect_to hq_company_settings_path(:anchor => "productsTab"), notice: 'Category was successfully created.' }
format.js { redirect_to hq_company_settings_path(:anchor => "productsTab") }
else
format.html { redirect_to hq_company_settings_path(:anchor => "productsTab") }
format.json { render json: @category.errors, status: :unprocessable_entity }
end
end
结束
类别模型:
belongs_to :company
has_many :products
accepts_nested_attributes_for :products, reject_if: :all_blank, allow_destroy: true
表格:
<!-- Add Products Form -->
<div>
<%= bootstrap_form_for(@category) do |f| %>
<% if @category.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@category.errors.count, "error") %> prohibited this category from being saved:</h2>
<ul>
<% @category.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<fieldset>
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-book"></i></span>
<%= f.text_field :name, hide_label: true %>
</div>
</fieldset>
<div>
<div>
<fieldset id="products">
<%= f.fields_for :products do |product| %>
<%= render 'product_fields', :f => product %>
<% end %>
</fieldset>
</div>
<div class="links margin-top-40">
<%= link_to_add_association ' Add Product', f, :products, class:"btn-u btn-u-blue btn-block" %>
</div>
<hr>
</div>
<div class="row">
<div class="col-md-12">
<span class="pull-right">
<%= f.submit "Save", class:"btn-u btn-block" %>
</span>
</div>
</div>
<% end %>
</div> <!-- End Form Wrapper -->
嵌套 Cocoon 形式:
<div class="nested-fields">
<div class="col-lg-9">
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-plus"></i></span>
<%= f.text_field :name, hide_label: true, placeholder: 'Product Name' %>
</div>
</div>
<div class="col-lg-3">
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-money"></i></span>
<%= f.text_field :price, hide_label: true, placeholder: 'Price' %>
</div>
</div>
<div class="col-lg-4">
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-tags"></i></span>
<%= f.text_field :sku, hide_label: true, placeholder: 'SKU/ID #' %>
</div>
</div>
<div class="col-md-4">
<div class="input-group margin-bottom-20">
<%= f.hidden_field :company_id, hide_label: true, value: current_user.company_id %>
<%= f.form_group :tracking do %>
<%= f.check_box :tracking, label: " Inventory Tracking", class: 'radio1 js-switch', name: 'my-checkbox', inline: true %>
<% end %>
</div>
</div>
<div class="col-md-4">
<div class="input-group txt1 margin-top-1">
<span class="input-group-addon"><i class="fa fa-cart-plus"></i></span>
<%= f.text_field :inventory, hide_label: true, class: "txt1", placeholder: 'Quantity' %>
</div>
</div>
<div class="col-md-6">
<div class="input-group txt2 margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-cart-plus"></i></span>
<%= f.text_field :minimum, hide_label: true, class: "txt2", placeholder: 'Min. Quantity' %>
</div>
</div>
<p class="links col-md-6">
<%= link_to_remove_association " Remove Product", f, class:"btn-u btn-u-red btn-block" %>
</p>
</div>
问题发生在我的复选框 "NAME" 属性 bootstrap 开关。
删除
name: 'my-checkbox'
来自
<%= f.form_group :tracking do %>
<%= f.check_box :tracking, label: " Inventory Tracking", class: 'radio1 js-switch', name: 'my-checkbox', inline: true %>
最终解决了我的问题。
我在 rails 4 应用程序中使用 Cocoon Gem 和 Bootstrap_Form_for。一切正常,创建和更新我的所有字段都没有问题,除非我尝试更改已设置的布尔字段。
下面是我的代码,非常感谢您的帮助。
products_controller:
def update
respond_to do |format|
if @product.update(product_params)
format.html { redirect_to @product, notice: 'Product was successfully updated.' }
format.json { render :show, status: :ok, location: @product }
else
format.html { render :edit }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
categories_controller:
def create
@category = Category.new(category_params)
respond_to do |format|
if @category.save
format.html { redirect_to hq_company_settings_path(:anchor => "productsTab"), notice: 'Category was successfully created.' }
format.js { redirect_to hq_company_settings_path(:anchor => "productsTab") }
else
format.html { redirect_to hq_company_settings_path(:anchor => "productsTab") }
format.json { render json: @category.errors, status: :unprocessable_entity }
end
end
结束
类别模型:
belongs_to :company
has_many :products
accepts_nested_attributes_for :products, reject_if: :all_blank, allow_destroy: true
表格:
<!-- Add Products Form -->
<div>
<%= bootstrap_form_for(@category) do |f| %>
<% if @category.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@category.errors.count, "error") %> prohibited this category from being saved:</h2>
<ul>
<% @category.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<fieldset>
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-book"></i></span>
<%= f.text_field :name, hide_label: true %>
</div>
</fieldset>
<div>
<div>
<fieldset id="products">
<%= f.fields_for :products do |product| %>
<%= render 'product_fields', :f => product %>
<% end %>
</fieldset>
</div>
<div class="links margin-top-40">
<%= link_to_add_association ' Add Product', f, :products, class:"btn-u btn-u-blue btn-block" %>
</div>
<hr>
</div>
<div class="row">
<div class="col-md-12">
<span class="pull-right">
<%= f.submit "Save", class:"btn-u btn-block" %>
</span>
</div>
</div>
<% end %>
</div> <!-- End Form Wrapper -->
嵌套 Cocoon 形式:
<div class="nested-fields">
<div class="col-lg-9">
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-plus"></i></span>
<%= f.text_field :name, hide_label: true, placeholder: 'Product Name' %>
</div>
</div>
<div class="col-lg-3">
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-money"></i></span>
<%= f.text_field :price, hide_label: true, placeholder: 'Price' %>
</div>
</div>
<div class="col-lg-4">
<div class="input-group margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-tags"></i></span>
<%= f.text_field :sku, hide_label: true, placeholder: 'SKU/ID #' %>
</div>
</div>
<div class="col-md-4">
<div class="input-group margin-bottom-20">
<%= f.hidden_field :company_id, hide_label: true, value: current_user.company_id %>
<%= f.form_group :tracking do %>
<%= f.check_box :tracking, label: " Inventory Tracking", class: 'radio1 js-switch', name: 'my-checkbox', inline: true %>
<% end %>
</div>
</div>
<div class="col-md-4">
<div class="input-group txt1 margin-top-1">
<span class="input-group-addon"><i class="fa fa-cart-plus"></i></span>
<%= f.text_field :inventory, hide_label: true, class: "txt1", placeholder: 'Quantity' %>
</div>
</div>
<div class="col-md-6">
<div class="input-group txt2 margin-bottom-20">
<span class="input-group-addon"><i class="fa fa-cart-plus"></i></span>
<%= f.text_field :minimum, hide_label: true, class: "txt2", placeholder: 'Min. Quantity' %>
</div>
</div>
<p class="links col-md-6">
<%= link_to_remove_association " Remove Product", f, class:"btn-u btn-u-red btn-block" %>
</p>
</div>
问题发生在我的复选框 "NAME" 属性 bootstrap 开关。
删除
name: 'my-checkbox'
来自
<%= f.form_group :tracking do %>
<%= f.check_box :tracking, label: " Inventory Tracking", class: 'radio1 js-switch', name: 'my-checkbox', inline: true %>
最终解决了我的问题。