微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何找出模型的所有关联?

如何解决如何找出模型的所有关联?

假设我有以下模型

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 模型本身中找出所有这些模型?我试过 User.reflections。但它没有显示与客户的关联。是否有一种方法说 User.relationships 将列出 Customer 和与 Customer 类似的所有模型?如果不是,我怎么能找到这样的模型?

解决方法

如果问题是查找 User 可以属于的所有类,那么实际上就是代码中的每个模型。这就是多态的作用。

如果问题是 User 当前属于哪个模型,那么使用数据库来弄清楚。

User.distinct.pluck(:loginable_type)

如果问题是哪些模型定义了 has_one :user 关系,那么您必须查看所有模型,并使用您已经找到的 .reflections 方法从它们的角度提出问题。>

,

belongs_to :loginable,polymorphic: true 在 User 模型中产生 loginable_idloginable_type(包含类名)字段。链接模型不一定有反向关系,所以你只能仔细检查代码才能找到这样的模型。

此外,生产数据可能包含指向应用程序中根本不存在的模型的链接(已从应用程序中删除,但未从数据中删除,获取这些会导致错误),从您的生产中获取 User.distinct.pluck(:loginable_type)使用过的列表(但由于上述原因 - 列表不保证是完整的)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。