列出模型的所有关联

问题描述 投票:0回答:1

我正在寻找一种方法来列出模型的所有关联。这是为了对大型旧数据库运行一些一致性后台验证。模型太多,无法手动发现并且容易出错。

我知道

Model.new.attributes
方法。但我看不出哪个属性是关联,是哪个模型,是否是多态。

也许我可以假设

something_id
是一个关联,并查找
something_type
属性来了解它是否是多态的。但这样我就无法捕捉到一对多的关联,对于多对多的关联就更难了。

有更可靠的方法吗?

ruby-on-rails rails-activerecord
1个回答
0
投票

在类上使用 reflect_on_all_associations。这将为每个关联返回一个 ActiveRecord::Reflection::AssociationReflection 子类数组(不幸的是未记录)。例如,belongs_to 关联将返回 ActiveRecord::Reflection::BelongsToReflection。

#klass
将返回关联的类,
#name
将返回关联名称,从
#association_class
您可以找出关联的类型。

例如。

class Parent < ApplicationRecord
end

class Child < ApplicationRecord
  belongs_to :parent
end

# Parent
p Child.reflect_on_all_associations.map(&:klass)
© www.soinside.com 2019 - 2024. All rights reserved.