如何检查一个ActiveRecord类是否属于另一个

时间:2011-09-20 01:55:14

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

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

def ClazzA < ActiveRecord::Base
  belongs_to :clazz_b
end

def ClazzB < ActiveRecord::Base has_many :clazz_a end

def belongs_to? a, b ... end

谢谢! 最大

2 个答案:

答案 0 :(得分:5)

  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

答案 1 :(得分:2)

试试这个:

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

注意

当我开始回答时,这个问题没有答案。完成答案后,我注意到@zeteic发布的答案。我正在回答这个问题,因为即使对于关联名称没有映射到模型名称的情况,此解决方案也会起作用。