Найти ассоциации для класса ActiveRecord во время выполнения? - PullRequest
8 голосов
/ 14 марта 2009

Я хотел бы найти ассоциации класса ActiveRecord во время выполнения ...

Предположим, у меня есть следующее:

class Person < ActiveRecord::Base
  has_many :chairs
  has_many :pens
end

class Chair < ActiveRecord::Base
  belongs_to :person
end

class Pen < ActiveRecord::Base
  belongs_to :person
end

Как я могу узнать во время выполнения, что у человека "много" стульев и ручек, и наоборот? Я ищу метод, который возвратил бы массив строк (если такой метод существует). т.е.

Person.has_many_assocations 

вернется:

["chairs", "pens"] 

и

Pen.belongs_to_associations

вернется:

["person"]

Мне не хватает такого метода, который существует ??

Спасибо за вашу помощь.

Ответы [ 2 ]

26 голосов
/ 14 марта 2009

Я думаю, класс ActiveRecord :: Reflection может быть тем, что вы ищете. Из документации:

  Account.reflect_on_all_associations             # returns an array of all associations
  Account.reflect_on_all_associations(:has_many)  # returns an array of all has_many associations
0 голосов
/ 14 марта 2009

Звучит как довольно глупая вещь во время выполнения. Что именно вы пытаетесь достичь? Я предполагаю, что есть простое и более часто используемое решение для вашей проблемы.

Если бы мне пришлось, я бы использовал TheModel.read_inheritable_attribute(:reflections).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...