2011-07-01 4 views
4

ancestry gem에는 트리 구조를 탐색하는 데 사용할 수있는 많은 메소드가 있습니다. Model.roots를 사용하여 모든 루트 요소 등을 표시 할 수 있습니다. 어떻게 반대입니까? - 각 트리 구조에 대해 최신 하위를 반환합니다.Ancestry gem : 스레드의 마지막 자식 만 반환하십시오.

내 모델 (최신/부울)에 여분의 열을 추가 한 다음 필터를 저장 한 후 일부 논리를 사용하는 방법에 대해 생각했습니다. 그러나이 방법은 다소 서투른 느낌입니다. :/

감사합니다. Asbjørn Morell는

답변

0

오래된 질문은. 나 자신도 해결책을 찾았지만 (조금 서투른) 나는 꽤 잘 작동한다고 생각한다. 그건 그냥 (검증 이전에) 사용 후

class Array 

    def ancestry_last_child 
    last_child = self.map { |a| [a[:id], a[:ancestry], a[:updated_at]] }.sort_by { |id, anc, dat| [anc.split('/').length, dat] }.last 
    self.find { |a| a[:id] == last_child[0] } 
    end 

end 

이 같은 :

account = Account.find([id]) 

if account.has_children? 
    last_child = account.descendants.ancestry_last_child 
end 

당신이 확장 루비/레일에 대한 의심이있는 경우

이 같은 방법으로 배열 클래스를 확장 핵심 클래스 this 도움이

:: EDIT :: 이전 솔루션이 완전히 작동하지 않습니다. 이 솔루션을 사용하려면 updated_atid

관련 문제