2011-10-30 2 views
0

저는 rails와 awesome_nested_set을 사용하여 nested_comments를 만듭니다 (아티스트는 많은 sketchbook_comments를 가지고 있습니다). 첫 번째 레벨은 timestamp에 따라 정렬 내림차순으로 지정하여 가장 위에있는 가장 최근의 주석을 볼 수 있도록하고 싶습니다. 나는 주석의 주석을 타임 스탬프의 ASC 시간순으로 나열하여 대화가 생성 된 순서대로 따라갈 수 있도록하고 싶습니다. 스택 오버플로처럼 지금은 단 1 단계 만 중첩시킬 계획입니다.첫 번째 수준은 sort desc이고 두 번째 수준은 sort asc입니다. 중첩 된 주석을 수행하는 방법?

artist.sketchbook_comments.order("lft ASC") 

그러나이 모든 새로운 루트 수준의 코멘트가 "끝"또는 "오른쪽에 넣어 것으로 보인다 : 나는 하나의 DB 호출에 협회에 대한 모든 의견을 얻을 수있어

#controller 
def create 

#create 1st level comment as simple association 
@sketchbook_comment = @artist.sketchbook_comments.create(params[:sketchbook_comment]) 

#if replying to a comment, only then do we nest 
if parent = @artist.sketchbook_comments.where(:id => params[:parent_id]).first 
    @sketchbook_comment.move_to_child_of(parent) 
end 

    redirect_to :back 
end 

(이전의 노드보다 큰 lft 값을 가짐). 그러므로 lft로 분류하면 어디서나 단지 연대순으로 운명 지을 것입니다.

제안 사항? (나는 모든 루트 노드 순서 ("created_at DESC")를 가져 와서 각 레벨에서 comment.children.order ("lft ASC")를 실행하여이 작업을 수행 할 수 있음을 알고 있지만 가능한 경우 DB를 여러 번 누르지 않는 것이 좋습니다)

답변

0

루트 레벨 주석을 삽입 할 때 왼쪽에 새 노드를 배치하기 위해 awesome_nested_set의 move_to_left_of (id)를 사용하는 모델 메소드가 추가되었습니다.

관련 문제