【发布时间】: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
给定 ActiveRecord::Base 的两个子类,我如何实现一个检查一个是否属于另一个的函数?
def ClazzA < ActiveRecord::Base
belongs_to :clazz_b
end
def ClazzB
def 属于_to?一,乙 ... 结尾
谢谢! 最大
【问题讨论】:
标签: ruby-on-rails activerecord model-associations
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
【讨论】:
试试这个:
def belongs_to? a, b
b.reflect_on_all_associations(:belongs_to).
any?{|bta| bta.association_class == a}
end
注意:
当我开始回答时,这个问题没有得到回答。完成答案后,我注意到@zeteic 发布的答案。我让答案保持不变,因为即使在关联名称未映射到模型名称的情况下,此解决方案也适用。
【讨论】: