2009-03-13 4 views
8

런타임에 ActiveRecord 클래스의 어소시에이션을 찾고 싶습니다 ...런타임에 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"] 

반환 값 :

["person"] 

존재하는 방법이 누락 되었습니까 ??

귀하의 도움에 감사드립니다.

답변

25

나는 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

실행 시간을 수행하는 것은 매우 바보 같은 소리입니다. 정확히 당신이 성취하고자하는 것은 무엇입니까? 귀하의 문제가 무엇이든간에 간단하고 일반적으로 사용되는 솔루션이 있다고 가정합니다.

내가해야한다면, TheModel.read_inheritable_attribute(:reflections)을 사용합니다.

+1

어 ... 레이크 작업이라고 생각합니다. 협회를 알아야하는 사람. –

+0

모델 자체는 연관성을 알고 있습니다. 그래서 나는 아직 너를 따르지 않고있다.) –