Rails 活动记录中的自引用问题

Posted

技术标签:

【中文标题】Rails 活动记录中的自引用问题【英文标题】:Self Referencing problem in Rails active record 【发布时间】:2022-01-13 01:11:48 【问题描述】:

我有一个名为 Task 的 rails 模型。我在我的模型中使用自引用设计

class Task < ApplicationRecord

  belongs_to :parent, class_name: "Task"
  has_many :children, class_name: "Task",foreign_key: "parent_id"
end

所以当我创建我的第一个对象时,它一直说“父母必须存在”。我不确定如何将对象作为此层次结构中的根。请帮我解决这个问题

【问题讨论】:

向我们展示异常 我使用rails内置的errors.full_messages方法和创建新任务时。我没有给它一个 parent_id,所以我从 rails 收到了这种“父母必须存在”的消息。 【参考方案1】:

belongs_to :parent, class_name: "Task" 更改为belongs_to :parent, optional: true, class_name: "Task"

这样,您将能够在没有父级的情况下创建任务。要验证任务是否是子任务,您可以检查 parent_id 是否有任何值:

def child?
  parent_id.present?
end

参考:https://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

【讨论】:

以上是关于Rails 活动记录中的自引用问题的主要内容,如果未能解决你的问题,请参考以下文章

如何加快rails3.2中的活动记录?我的活动记录查询时间超过 3 分钟

如何在 Rails 2.3.8 中使用带有关联的 Active 脚手架列出活动记录?

如何要求在 Rails 之外工作的活动记录

Rails 记录 VIP 用户活动

在Rails 6中默认清除blobs。

Rails 4 - 如何在活动记录查询中为包含()和连接()提供别名