Rails - Действует как вложенный - Обеспечение максимального уровня - PullRequest
0 голосов
/ 19 февраля 2011

В настоящее время я использую гем '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.

Идеи?Спасибо

1 Ответ

1 голос
/ 19 февраля 2011

Кажется, это работает, хотя может быть лучшее решение.

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 приводит к сбою, я не знаю почему. Возможно, это связано с перебалансировкой дерева?

...