我有一个rails 4应用程序,它有一个添加页面和一个编辑页面。您可以轻松添加元素(没有问题),但是当您编辑它们并单击“保存”时,它会添加您最初第二次添加的字段。
这是我的_form.html.erb
<%= nested_form_for @store do |f| %>
<%= f.fields_for :products do |product_form| %>
<div class='field'>
<%= product_form.text_field :name %>
<%= product_form.hidden_field :_destroy %>
<%= link_to "REMOVE PRODUCT", '#', class: "remove_fields" %>
</div>
<% end %>
<p><%= f.link_to_add "Add PRODUCT", :products %></p>
<%= f.submit 'Save', :class => "primary small" %>
<% end %>
和我的store.rb模型:
class Store < ActiveRecord::Base
has_many :products, class_name: "StoreProduct"
accepts_nested_attributes_for :products, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true
end
我的控制器中的更新操作如下:
def update
respond_to do |format|
if @store.update(store_params)
format.html { redirect_to store_products_path(@store), notice: 'Store was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @store.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:1)
你的控制器中store_params
的样子是什么?如果id
不是允许值之一,那么每次update
操作发生时,您都可以开始看到创建为新记录的嵌套模型。你可能希望有类似的东西:
params.require(:store).permit(products_attributes: [:id, :name, :_destroy])
请参阅nested_form
gem的强参数documentation。