Rails编辑添加字段问题

时间:2014-04-06 00:00:18

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个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

1 个答案:

答案 0 :(得分:1)

你的控制器中store_params的样子是什么?如果id不是允许值之一,那么每次update操作发生时,您都可以开始看到创建为新记录的嵌套模型。你可能希望有类似的东西:

params.require(:store).permit(products_attributes: [:id, :name, :_destroy])

请参阅nested_form gem的强参数documentation