开发者

Rails - Acts as nested - Enforcing a Max Level

I'm currently using the gem 'nested_set' for comment threading.

What I want to do is prevent the comment level from going more than 2 levels deep. What I tired doing was something like this:

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

But it looks like you cant set a level only obtain an objects level. With the goal being to enforce a MAX of 2 levels deep for comment threading. Can anyone suggest a way to enforce that from happening?

The use case being:

Comment Main (level 0)

  Comment Reply (level 1)

    Comment Reply about XXXX (level 2)开发者_开发知识库

When a user replies to the last one (about XXXX) I don't want the comment to be set to a level of 3, I want to cap that at 2.

Ideas? Thanks


This seems to work, though there might be a better solution.

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

Note that changing this to before_save makes it fail, I don't know why. Perhaps it has to do with the rebalancing of the tree?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜