2012-04-06 5 views
0

작동하지 않는 것을 발견합니다 : 그것은 별칭을 만들 수 있기 때문에belongs_to 내가이 두 액티브 모델을 가지고 마스터 부모가

Milestone 
    has_many :nodes 

Node 
    belongs_to :milestone 

이정표는 다수의 노드를 가질 수 있습니다. 그런 다음 마스터 노드를 찾는 방법이 필요합니다.

나는 두 가지 옵션을 시도했지만 그들 중 누구도 완전하게 작동하지 :

옵션 1 : 연결을 추가 노드 :

belongs_to :node, conditions: {is_alias: true} 

나에게 분명 보이지만 전혀 작동하지 않습니다. 내가 @의 milestone.node을 수행 할 때, 그 결과는 "전무"

옵션 2 :이 반 작동

def node 
    Node.where(milestone_id: self.id, is_alias: false) 
    end 

:

@ milestone.node =>는 권리를 반환하는 노드 방법을 만들 노드

오류를 반환 @ milestone.node.milestone => #

내가 마스터 부모 공정표 INFOR을 찾을 수있을 것 "깨끗한"방법이 필요

에 대한 정의되지 않은 메서드`이정표 ' .

+1

죄송이 그 방법을 사용할 수 있지만 나는 그것이 가능하기 때문에 이정표가 여러 노드를 가질 수 있습니다 "이해하지 않는 노드 모델의 일부 범위 및 클래스 메소드가 필요합니다 별칭을 만들 수 있습니다. " –

+1

체인 끝 부분에'first' 메서드를 적용해야하기 때문에 두 번째 옵션이 작동하지 않습니다. – MikDiet

답변

1

당신은

scope :aliases, where(is_alias: true) 
scope :masters, where(is_alias: false) 

def self.master 
    masters.first 
end 

그래서 당신이

@milestone.nodes.master # => master node 
@milestone.nodes.aliases # => aliases 
+0

물론! "첫 번째"방법이 없으면 레일스는 결과에 단 하나의 레코드 만 있음에도 불구하고 컬렉션이라고 가정합니다. 고마워요! 내 옵션 1 (연결 정의)이 작동하지 않는 이유는 무엇입니까? – ndemoreau

+0

옵션 1이 작동하지 않습니다. 처음에는 노드 '@milestone.node = [some_node]' – MikDiet

관련 문제