【问题标题】:How to find out all the association of a model?如何找出模型的所有关联?
【发布时间】:2021-04-14 01:31:43
【问题描述】:

假设我有以下模型

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 会列出客户和所有类似于客户的模型?如果没有,我怎么能找到这样的模型?

【问题讨论】:

    标签: ruby-on-rails relationship polymorphic-associations model-associations rails-models


    【解决方案1】:

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

    如果问题是User目前属于什么型号,那就用数据库来弄清楚。

    User.distinct.pluck(:loginable_type)
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多