-1

我有一个基于 neo4j.rb 的 rails 模型(评论)。我的简单方法应该返回孩子的数量,而是返回 LocalJumpError(没有给出块(yield))。我究竟做错了什么?

has_many :both, :children, model_class: Comment, unique: true

def get_number_of_replies
    if children.count == 0
      0
    else
      children.count + children.each.get_number_of_replies
    end
end
4

3 回答 3

1

我认为

children.count + children.each.get_number_of_replies

应该

children.count + children.collect(&:get_number_of_replies).sum

正如您的错误所示,each需要一个块。

于 2015-02-23T18:40:33.807 回答
1

您需要遍历每个孩子以获得所需的结果:

def get_number_of_replies
  if children.count == 0
    0
  else
    total = 0
    children.each do |c|
      total += children.get_number_of_replies
    end
    children.count + total
  end
end
于 2015-02-23T19:20:33.777 回答
0

Brad Werth 写的是正确的。问题还在于,当子连接双向工作时,我正在创建一个无限循环。所以这里是解决方案:

  has_many :out, :children, model_class: Comment, unique: true
  has_one :in, :child_of, model_class: Comment, unique: true

  def get_number_of_replies
    result = 0
    unless children.count() == 0
      result += children.count
      children.each do |child|
        result += child.get_number_of_replies
      end
    end
    result
  end
于 2015-02-23T19:32:14.283 回答