в ruby, есть большая разница между чем-то, что является нулем, и чем-то, что не определено.Учитывая следующее, из IRB:
ruby-1.9.2-p0 :002 > active_record
NameError: undefined local variable or method `active_record' for main:Object
from (irb):2
from /Users/jed/.rvm/rubies/ruby-1.9.2-p0/bin/irb:16:in `<main>'
ruby-1.9.2-p0 :003 > active_record = nil
=> nil
ruby-1.9.2-p0 :004 > active_record.class
=> NilClass
ruby-1.9.2-p0 :006 > active_record.nil?
=> true
Итак, объект, который равен nil, является экземпляром NilClass и поэтому отвечает на сообщение nil?
вернет true, но без объявления переменной (как в вашемкод) Руби не знает, что вы звоните.
Здесь есть несколько вариантов:
Оператор Ruby ||
является строгим, тогда как ключевое слово or
менее строгое, поэтому я не знаю, где операция vb сравнивается сэти два или варианты потока.
вы могли бы использовать аккуратный маленький драгоценный камень под названием ' andand '
require 'andand'
active_record.andand.errors.count == 0
, но, как правило, когда вы имеете дело с этой ситуацией в рельсах, вы должны использовать другое средствочтобы определить ситуацию выше, рассмотрите:
@post = Post.new(:my_key => "my value") #=> an ActiveRecord object
if @post.valid?
# do something meaningful
else
puts @post.errors.full_messages.to_sentence
end
, и если вы хотите назначить что-либо на основе, если это возможно не определено, вы захотите использовать памятку:
@post ||= Post.new
, которая объявитесли объект не определен или использовать существующий объект