问题描述
在创建新记录时,嵌套表单非常有用。但是,当我编辑记录时,即使我无意添加新项,它也会创建重复的子项。
如何在更新销售订单时阻止它创建新的子项目?
class SalesOrderItem < ApplicationRecord
belongs_to :item
belongs_to :sales_order
class SalesOrder < ApplicationRecord
has_many :sales_order_items,dependent: :destroy,inverse_of: :sales_order
accepts_nested_attributes_for :sales_order_items
销售订单负责人(父母)
def new
@sales_order = SalesOrder.new
@items = Item.all
@customers = Customer.all
@sales_order.sales_order_items.build
end
def edit
end
def update
respond_to do |format|
if @sales_order.update(sales_order_params)
format.html { redirect_to @sales_order,notice: 'Sales order was successfully updated.' }
format.json { render :show,status: :ok,location: @sales_order }
else
format.html { render :edit }
format.json { render json: @sales_order.errors,status: :unprocessable_entity }
end
end
end
-----------------------------------------------
def sales_order_params
params.require(:sales_order).permit(:customer_id,:date,:user_id,:remarks,:vat_ex,:sales_order_items_attributes => [:item_id,:price,:quantity]
)
end
解决方法
要让Rails知道您正在编辑现有的sales_order_item
,您需要在请求中提供其id
,否则会认为您打算创建一个新的:sales_order_items_attributes => [:id,...]
。
因此,您需要在子参数中允许使用id:
main()
并确保您以触发此操作的形式提交它。