Как я могу проверить, принадлежит ли один класс ActiveRecord другому - PullRequest
4 голосов
/ 20 сентября 2011

Учитывая два подкласса ActiveRecord :: Base, как я могу реализовать функцию, которая проверяет, принадлежит ли один другому?

def ClazzA < ActiveRecord::Base belongs_to :clazz_b end</p> <p>def ClazzB < ActiveRecord::Base has_many :clazz_a end</p> <p>def belongs_to? a, b ... end

Спасибо!Max

Ответы [ 2 ]

5 голосов
/ 20 сентября 2011
  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
2 голосов
/ 20 сентября 2011

Попробуйте это:

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

Примечание :

Этот вопрос остался без ответа, когда я начал отвечать. После завершения ответа я заметил ответ, опубликованный @zeteic. Я оставляю ответ в силе, так как это решение будет работать даже в тех случаях, когда имя ассоциации не соответствует названию модели.

...