方法ruby中的返回值

时间:2012-02-09 10:03:04

标签: ruby-on-rails ruby methods

我有这个方法:

def validates_image_dependents
  post = self.find(params[:id])
   i=0
   for this_post in Post.all
    if this_post.posted_filename == post.post_filename
     i+=1
    end
   end
 return i > 1
end

如果i>我希望方法返回true或false dependend 1,但我没有。

我做得不好?

没有方法可以正常工作。

谢谢

3 个答案:

答案 0 :(得分:4)

看起来你看到nil导致irb输出结果如下:

irb(main):018:0> def validates_image_dependents                                                                 
irb(main):019:1>   post = self.find(params[:id])                                                                
irb(main):020:1>    i=0                                                                                         
irb(main):021:1>    for this_post in Post.all                                                                   
irb(main):022:2>     if this_post.posted_filename == post.post_filename                                         
irb(main):023:3>      i+=1                                                                                      
irb(main):024:3>     end                                                                                        
irb(main):025:2>    end                                                                                         
irb(main):026:1>  return i > 1                                                                                  
irb(main):027:1> end                                                                                            
=> nil 

这是因为你定义的方法 validates_image_dependents和方法表达式的定义返回nil

您需要执行您的方法才能获得实际结果:

irb(main):028:0> validates_image_dependents 
=> true

答案 1 :(得分:0)

这对我来说很好。它返回true或false。

def some_method
   i=4 #or i = 0
   return i > 1
end

这个方法可能会发生什么奇怪的事情?我放了一个调试器并检查。

答案 2 :(得分:0)

为了简化您的方法,您可以使用以下内容:

  Post.all.count(|t| t.posted_filename == post.filename) > 1

我无法看到此代码返回nil的任何方式。

无论我拥有哪种类型或价值,

return i > 1都无法返回nil。 如果我是nil或任何其他类型而不是Numeric它应该引发错误,否则,它应该返回一个布尔值。更好地了解您正在运行的代码。