給定ActiveRecord :: Base的兩個子類,如何實現一個函數來檢查是否屬於另一個類?如何檢查一個ActiveRecord類是否屬於另一個
def ClazzA < ActiveRecord::Base
belongs_to :clazz_b
end
def ClazzB < ActiveRecord::Base has_many :clazz_a end
def belongs_to? a, b ... end
謝謝! 最大
給定ActiveRecord :: Base的兩個子類,如何實現一個函數來檢查是否屬於另一個類?如何檢查一個ActiveRecord類是否屬於另一個
def ClazzA < ActiveRecord::Base
belongs_to :clazz_b
end
def ClazzB < ActiveRecord::Base has_many :clazz_a end
def belongs_to? a, b ... end
謝謝! 最大
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發佈的答案。即使對於關聯名稱不映射到模型名稱的情況,此解決方案也可以正常工作,因此我將答案放在此處。
感謝您的回答KandadaBoggu!感謝您的清晰度。 – maxenglander
您可能想要在模型中將其定義爲一個類方法,以便於閱讀:a。ClazzB – zetetic
好極了!非常感謝。 – maxenglander
在我的控制器中,我不得不將第二行更改爲: sym = b.class.name.to_s.downcase.to_sym – alalani