我有这个型号:
class Product < ActiveRecord::Base
has_many :product_images, dependent: :destroy, autosave: true
accepts_nested_attributes_for :product_images, allow_destroy: true
end
在保存新产品之前,我通过ajax创建了一堆ProductImage模型。 ajax为productImage创建表单输入:id,:feature和:_destroy属性在product_images_attributes上,我在日志中正确地看到了这些参数:
"product" => {"name" => "Test", "product_images_attributes"=>{"0"=>{"id"=>"112", "featured" => "true", "_destroy"=>""}}}
在我的控制器中,我在#create中执行此操作:
@product = Product.new(params.require(:product).permit!)
@product.save
当我传递这些参数时,当我尝试分配参数时,我得到了这个错误:
ActiveRecord::RecordNotFound (Couldn't find ProductImage with ID=112 for Product with ID=)
数据库显示ID = 112的ProductImage与product_id = null一样存在。
当然,在更新现有产品时一切正常。
如何使用标准导轨方法将现有ProductImages与创建新记录相关联?
答案 0 :(得分:-1)
nested_attributes
不是我推荐的方式。这是非常有益的。我建议使用form objects。
您可以这样做:
class ProductCreation
include ActiveModel::Model
attr_accessor :product_name, :product_image_ids
def save
images = product_image_ids.map {|id| Image.find(id) }
product = Product.new(name: product_name)
product.images = images
product.save
end
end
在控制器和视图中使用ProductCreation
。