0

저는 현재 코멘트 스레딩에 'nested_set'이라는 보석을 사용하고 있습니다.레일 - 중첩 된 동작 - 최대 레벨 적용

내가 원하는 것은 코멘트 레벨이 2 레벨 이상 벗어나는 것을 방지하는 것입니다. 내가 싫어하는 일은 다음과 같다 :

레벨을 설정할 수없는 것처럼 보이지만 오브젝트 레벨 만 얻는다. 코멘트 스레딩을위한 최대 2 레벨의 레벨을 시행하는 것이 목표입니다. 누구든지 그런 일을하도록 강제 할 수있는 방법을 제안 할 수 있습니까? 사용자가 (XXXX에 대한) 마지막에 응답 할 때

Comment Main (level 0) 

    Comment Reply (level 1) 

    Comment Reply about XXXX (level 2) 

내가 코멘트 3의 레벨로 설정되고 싶지 않아, 난에 그 캡 할 :

유스 케이스의 존재가

2.

아이디어가 있으십니까? 감사합니다.

+1

레벨과 관련하여 몇 가지 문제가있는 것으로 보입니다 : http://rubydoc.info/gems/nested_set/1.6.4/frames'each_with_level'을 사용해 보셨습니까? – Steve

+0

@ 스티브, 고마워요.하지만이 법안이 여기에 어울리는지는 모르겠습니다. 나는 each_with_level이 결과에 대해 반복한다고 생각한다. 내가 처리하고있는 곳은 새로운 중첩 된 객체를 삽입하고 레벨을 깊게 설정하지 못하게하려는 것이다. 권리? – AnApprentice

답변

1

더 좋은 해결책이 있을지 모르지만 이것이 작동하는 것처럼 보입니다.

class Comment < ActiveRecord::Base 
    acts_as_nested_set 

    after_save :check_level 

    def check_level 
    if level > 2 
     move_to_child_of(parent.parent) 
    end 
    end 
end 

이 값을 before_save으로 변경하면 실패하는 이유는 알 수 없습니다. 아마도 그것은 나무의 재조정과 관련이 있습니까?

+0

이상한, before_save는 나를 위해 실패하지 않습니다. 하지만 실패한 것은 IF LEVEL이거나 self.level (모두 소문자) 인 경우 항상 0을 반환합니다. – AnApprentice

+0

저장 후 acts_as_nested_set이 실행되기 때문에 보이는 것처럼 보입니까? comment 객체 before_save의 로거 출력은 parent_id : 251, lft : nil, rgt : nil을 보여줍니다. – AnApprentice

관련 문제