2012-02-09 3 views
3

У меня есть этот метод:возвращаемого значения в методе рубине

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, но я получаю ноль.

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

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

Спасибо

ответ

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

Отлично, это была проблема: D Извините за мою неспособность. – hyperrjas

0

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

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

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

+0

С помощью этого метода я получаю ** nil ** в своих консольных рельсах. Я использую ruby ​​1.9.2-p290. Я использую Rails 3.1.3 – hyperrjas

+0

Шахта была в рубине ree-1.8.7-2011.03. Я попробую это в ruby ​​1.9.2 и дам вам знать. –

0

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

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

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

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

+0

Проблема в том, что я запустил метод, а затем вернул true или false: D. – hyperrjas

Смежные вопросы