возвращаемое значение в методе ruby - PullRequest
3 голосов
/ 09 февраля 2012

У меня есть этот метод:

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

Я хочу, чтобы метод возвращал истину или ложь в зависимости, если я> 1, но я получаю ноль.

Что я делаю плохо?

Без метода отлично работает.

Спасибо

Ответы [ 3 ]

4 голосов
/ 09 февраля 2012

Похоже, вы видите 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
0 голосов
/ 09 февраля 2012

, чтобы упростить ваш метод, вы можете использовать что-то вроде этого:

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

Я не вижу способов, чтобы этот код возвращал ноль.

return i > 1 не может вернуть ноль, независимо от того, какой тип или значение у меня есть.Если i - это nil или любой другой тип, а не Numeric, это должно вызвать ошибку, в противном случае он должен возвращать логическое значение.Посмотрите, какой код вы используете.

0 голосов
/ 09 февраля 2012

Это прекрасно работает для меня.Возвращает true или false.

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

Может быть, что-то странное происходит в методе?Я бы поставил отладчик и проверил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...