ActiveRecord::Base の 2 つのサブクラスが与えられた場合、一方が他方に属しているかどうかを確認する関数を実装するにはどうすればよいでしょうか?
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 の 2 つのサブクラスが与えられた場合、一方が他方に属しているかどうかを確認する関数を実装するにはどうすればよいでしょうか?
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 によって投稿された回答に気付きました。アソシエーション名がモデル名にマップされていない場合でも、このソリューションは機能するため、回答をそのままにしておきます。