我有user
has_many user_items
和user_items
has_many user_item_images
的关联。已经退出user
。我可以创建一个新的user_item
user_item = user.user_items.create(name: 'foo')
我可以创建一个新的user_item_image
user_item.user_item_images.create(picture: file)
但我对user_item
进行了验证,其中user_item
不能存在user_item_image
。
如何同时创建这两个?
答案 0 :(得分:3)
首先build
两个项目然后保存父项。这将有效,因为:
count
,因为它会执行COUNT
查询,并且不会包含未保存的对象。请改为使用size
,或者确定(对于未加载的关联,size
调用计数为.to_a.size
您的代码应该像:
user_item = user.user_items.build(name: 'foo')
user_item.user_item_images.build(picture: file)
user_item.save! # Bang for safety. If in controller, you can fork with if instead
答案 1 :(得分:1)
BroiSatse有一个正确的答案。如果你真的想在一行中做到这一点,你可以:
user_item = user.user_items.create!(name: 'foo', user_item_images_attributes: { picture: file })
在我自己的代码中,我通常只是为了可读性和可维护性而使它看起来像BroiSatse的代码 - 构建初始对象,添加相关项,然后保存。使用单行可能会快一点,但除非你做了数百万次,否则不太可能有所作为。