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 级深度的 MAX。任何人都可以建议一种方法来强制这种情况发生吗?

用例是:

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 回答