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 分钟