首页 > 解决方案 > 如何为给定的父 ID 创建嵌套对象?

问题描述

让我们有一个名为的父对象和一个名为 的Parent嵌套对象Kid

父.rb:

class Parent < ApplicationRecord
    has_many :kids, dependent: :delete_all
end

孩子.rb:

class Kid < ApplicationRecord
  belongs_to :parent
end

我有一个id 为 5的父对象,我想为其创建一个Kid对象。

当明确指定其父对象 ID 时,ruby 表达式会是什么样子?起初我想到的以下表达式不起作用:

5.kids.create(Name: "John)

标签: ruby-on-railsrubynested

解决方案


你有两种方法可以做到这一点

更快但不太安全的方法

Kid.create(parent_id: 5, name: "John")

parent如果数据库中没有 id = 5 ,这将引发错误。

较慢但更安全的方法

Parent.find_by(id: 5)&.kids&.create(name: "John")

这将执行 2 个 SQL 语句,获取父级 (id = 5),并插入一个孩子。

如果找不到父级,则不会创建子级。


推荐阅读