【问题标题】:How can I check if one ActiveRecord class belongs to another如何检查一个 ActiveRecord 类是否属于另一个
【发布时间】:2011-09-20 01:55:13
【问题描述】:

给定 ActiveRecord::Base 的两个子类,我如何实现一个检查一个是否属于另一个的函数?

def ClazzA < ActiveRecord::Base
  belongs_to :clazz_b
end

def ClazzB

def 属于_to?一,乙 ... 结尾

谢谢! 最大

【问题讨论】:

    标签: ruby-on-rails activerecord model-associations


    【解决方案1】:
      def belongs_to?(a,b)
        sym = b.to_s.downcase.to_sym
        a.reflect_on_all_associations(:belongs_to).map(&:name).include?(sym)
      end
    
    > belongs_to?(ClazzA,ClazzB) # true
    > belongs_to?(ClazzB,ClazzA) # false
    

    【讨论】:

    • 您可能希望在模型中将其定义为类方法以使其更易于阅读,例如:Clazza.belongs_to?(ClazzB)
    • 在我的控制器中,我不得不将第二行更改为:sym = b.class.name.to_s.downcase.to_sym
    【解决方案2】:

    试试这个:

    def belongs_to? a, b
      b.reflect_on_all_associations(:belongs_to).
        any?{|bta| bta.association_class == a}
    end
    

    注意

    当我开始回答时,这个问题没有得到回答。完成答案后,我注意到@zeteic 发布的答案。我让答案保持不变,因为即使在关联名称未映射到模型名称的情况下,此解决方案也适用。

    【讨论】:

    • 感谢 KandadaBoggu 的回答!感谢您的清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多