2011-09-20 3 views

답변

5
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 
+0

더 쉽게 읽을 수 있도록 클래스 메소드로 모델에서 정의하고 싶을 수도 있습니다 : Clazza.belongs_to? (ClazzB) – zetetic

+0

좋아요! 고마워. – maxenglander

+0

내 컨트롤러에서 두 번째 줄을 다음과 같이 변경해야했습니다. sym = b.class.name.to_s.downcase.to_sym – alalani

2

이 시도 :

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

: 나는 대답하기 시작했을 때

하는이 질문은 답이 있었다. 대답을 완료 한 후 @zeteic이 게시 한 답변을 발견했습니다. 연결 이름이 모델 이름에 매핑되지 않은 경우에도이 솔루션이 작동하므로 응답을 기다리게합니다.

+0

답을 주셔서 감사합니다 KandadaBoggu! 당신의 명료성을 감사하십시오. – maxenglander

관련 문제