0

私は現在、コメントのスレッド化にgem'nested_set'を使用しています。

私がやりたいのは、コメントレベルが2レベルを超えないようにすることです。私が疲れたのは次のようなものでした。

class Comment < ActiveRecord::Base
    ....
    before_save :ensure_max_nestedset_level
  private

    # We don't want comments to go more than 2 levels deep. That's overkill
    def ensure_max_nestedset_level
      if self.level > 2
        self.level = 2
      end
    end

end

ただし、レベルを設定してオブジェクトレベルのみを取得することはできないようです。コメントのスレッド化のために最大2レベルの深さを強制することを目標としています。誰かがそれが起こるのを強制する方法を提案できますか?

ユースケースは次のとおりです。

Comment Main (level 0)

  Comment Reply (level 1)

    Comment Reply about XXXX (level 2)

ユーザーが最後のコメント(XXXXについて)に返信するとき、コメントをレベル3に設定したくないので、それを2に制限したいと思います。

アイデア?ありがとう

4

1 に答える 1

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すると失敗することに注意してください。理由はわかりません。おそらく、それはツリーのリバランスと関係があるのでしょうか?

于 2011-02-19T01:28:59.480 に答える