2015-02-23 118 views
-1

我有一个基于neo4j.rb的rails模型(评论)。我简单的方法应该返回的孩子的数量,但是而不是返回一个LocalJumpError(没有块(屈服))。我究竟做错了什么?为什么我的递归函数不起作用?

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 
+0

我怀疑你需要一些括号。请参阅http://stackoverflow.com/questions/18623447/block-syntax-difference-causes-localjumperror-no-block-given-yield – 2015-02-23 18:35:04

回答

1

我觉得

children.count + children.each.get_number_of_replies 

应该

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

当你的错误指示,each预计块。

+0

这将返回一个SystemStackError(堆栈级别太深),但绝对是正确的路要走。 编辑:我只有一个嵌套评论,所以错误不能是我有太多的评论。 – Johannes 2015-02-23 18:44:06

+0

而children.children.count返回0 – Johannes 2015-02-23 18:46:13

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 
0

什么布拉德韦斯写是正确的。问题在于,随着儿童关系的双向运作,我正在创造一个无限循环。所以这里是解决方案:

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 
相关问题