如何找出模型的所有关联?
How to find out all the association of a model?
假设我有以下型号
class User < ApplicationRecord
devise :database_authenticable,:registerable
:recoverable, :trackable, :validatable, :rememberable
belongs_to :loginable, polymorphic: true
end
class Customer < ApplicationRecord
has_one :user, as: :loginable, dependent: :destroy
end
有很多与Customer相似的模型。我如何从用户模型本身找出所有这些模型?我试过了User.reflections。但它不显示与客户的关联。有没有一种方法说 User.relationships 会列出 Customer 和所有与 Customer 相似的模型?如果不是,我如何才能找到这样的模型?
如果问题是查找 User
可以属于的所有 类,那么这实际上就是代码中的每个模型。这就是多态的作用。
如果问题是User
目前属于什么型号,那就用数据库搞清楚。
User.distinct.pluck(:loginable_type)
如果问题是什么模型定义了 has_one :user
关系,那么您必须查看所有模型并使用您已经找到的 .reflections
方法从他们的角度提出问题。
belongs_to :loginable, polymorphic: true
在用户模型中生成 loginable_id
和 loginable_type
(包含 class 名称)字段。链接模型不一定要有反向关系,所以你只能仔细检查代码才能找到这样的模型。
此外,生产数据可能包含指向应用程序中根本不存在的模型的链接(已从应用程序中删除,但未从数据中删除,获取这些会导致错误),从您的生产中获取 User.distinct.pluck(:loginable_type)
使用过的列表(但由于上述 - 列表不保证完整)。
假设我有以下型号
class User < ApplicationRecord
devise :database_authenticable,:registerable
:recoverable, :trackable, :validatable, :rememberable
belongs_to :loginable, polymorphic: true
end
class Customer < ApplicationRecord
has_one :user, as: :loginable, dependent: :destroy
end
有很多与Customer相似的模型。我如何从用户模型本身找出所有这些模型?我试过了User.reflections。但它不显示与客户的关联。有没有一种方法说 User.relationships 会列出 Customer 和所有与 Customer 相似的模型?如果不是,我如何才能找到这样的模型?
如果问题是查找 User
可以属于的所有 类,那么这实际上就是代码中的每个模型。这就是多态的作用。
如果问题是User
目前属于什么型号,那就用数据库搞清楚。
User.distinct.pluck(:loginable_type)
如果问题是什么模型定义了 has_one :user
关系,那么您必须查看所有模型并使用您已经找到的 .reflections
方法从他们的角度提出问题。
belongs_to :loginable, polymorphic: true
在用户模型中生成 loginable_id
和 loginable_type
(包含 class 名称)字段。链接模型不一定要有反向关系,所以你只能仔细检查代码才能找到这样的模型。
此外,生产数据可能包含指向应用程序中根本不存在的模型的链接(已从应用程序中删除,但未从数据中删除,获取这些会导致错误),从您的生产中获取 User.distinct.pluck(:loginable_type)
使用过的列表(但由于上述 - 列表不保证完整)。