我有一个关联,其中 user
has_many user_items
和 user_items
has_many user_item_images
。与一个已经退出的用户
。我可以创建一个新的 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_image
就不可能存在 user_item
。
如何同时创建这两个?
最佳答案
首先构建
两个项目,然后保存父项。这会起作用,因为:
- 只有在将对象保存到数据库中时才会调用验证
- 保存未保存的父对象会自动保存所有关联的对象(通过 has_one 和 has_many,如果没有自动保存选项则不会保存 belongs_to 对象)
- 验证(很可能)基于关联,并且关联在其目标中包含未保存但已分配的对象。但是请注意,您不能在验证中使用
count
,因为它执行COUNT
查询并且不会包括未保存的对象。请改用size
,或者 super 确定(因为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
关于ruby-on-rails - Rails - 同时创建 child 和 child 的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35903967/