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

标签 ruby-on-rails ruby

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

相关文章:

ruby-on-rails - Rails 在 ruby​​ 1.9.1 上初始化非常慢

ruby-on-rails - 使用延迟作业的页面缓存

ruby - 语法错误,意外的 ':',期待 ')'

ruby-on-rails - 如何解析服务器端(rails)中的复选框值?

ruby - vim 中的内部 ruby​​ 错误

ruby-on-rails - ROR + 通过用另一个字符使用 ruby​​ 代码检测它来替换最后一个字符

sql - 是否可以在 Rails 迁移中使用外部 SQL 文件?

javascript - Rails & Zurb Modal 在编辑时加载整个页面

ruby-on-rails - 损坏的 RSpec 和 Cucumber 测试并且不确定在哪里

ruby - 使用 Vagrant 的多个 EC2 实例