gpt4 book ai didi

ruby-on-rails - Rails - 同时创建 child 和 child 的 child

转载 作者:太空宇宙 更新时间:2023-11-03 17:31:19 27 4
gpt4 key购买 nike

我有一个关联,其中 user has_many user_itemsuser_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

如何同时创建这两个?

最佳答案

首先构建 两个项目,然后保存父项。这会起作用,因为:

  1. 只有在将对象保存到数据库中时才会调用验证
  2. 保存未保存的父对象会自动保存所有关联的对象(通过 has_one 和 has_many,如果没有自动保存选项则不会保存 belongs_to 对象)
  3. 验证(很可能)基于关联,并且关联在其目标中包含未保存但已分配的对象。但是请注意,您不能在验证中使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com