Подтвердить что ты не робот

Как я могу проверить, нет ли объекта в ruby ​​на rails 2?

Я хочу проверить, когда мой объект @objectname не равен нулю, чтобы показать значения @objectname else, чтобы показать, что никаких значений не найдено.

Я пробовал это:

<% if (@objectname != null) then %>

но я получаю сообщение об ошибке.

4b9b3361

Ответ 2

Вы можете проверить, нет ли объекта nil (null), вызвав его? или пустой?.

@object.present?

это вернет false, если проект представляет собой пустую строку или нуль.

или вы можете использовать

@object.blank?

Это то же самое, что и сейчас? с ударом, и вы можете использовать его, если вам не нравится "если". это вернет true для пустой строки или nil.

Ответ 3

Теперь в Ruby 2.3 вы можете использовать оператор &. ("оператор одиночества"), чтобы одновременно проверять наличие nil и доступ к значению.

@person&.spouse&.name

https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#Other_operators


Вместо этого используйте #try, чтобы вам не приходилось постоянно проверять nil.

http://api.rubyonrails.org/classes/Object.html#method-i-try

@person.try(:spouse).try(:name)

вместо

@person.spouse.name if @person && @person.spouse

Ответ 4

В вашем примере вы можете просто заменить null на 'nil, и он будет работать нормально.

require 'erb'

template = <<EOS
<% if (@objectname != nil) then %>
  @objectname is not nil
<% else %>
  @objectname is nil
<% end %>
EOS

@objectname = nil
ERB.new(template, nil, '>').result # => "  @objectname is nil\n"

@objectname = 'some name'
ERB.new(template, nil, '>').result # => "  @objectname is not nil\n"

Вопреки словам другого автора, вы можете видеть выше, что then прекрасно работает в Ruby. Это не часто, но это хорошо.

#blank? и #present? имеют другие последствия. В частности, если объект отвечает на #empty?, они проверят, является ли он пустым. Если вы перейдете в http://api.rubyonrails.org/ и поищете "пусто?", Вы увидите, для каких объектов он определен и как он работает. Глядя на определение для объекта, мы видим: "Объект пустой, если его ложная, пустая или строка пробела. Например, '', '', nil, [] и {} - все пустой ". Вы должны убедиться, что это то, что вы хотите.

Кроме того, nil считается ложным, а все, кроме false и nil, считается истинным. Это означает, что вы можете непосредственно поместить объект в оператор if, поэтому более каноническим способом написания вышеприведенного будет

require 'erb'

template = <<EOS
<% if @objectname %>
  @objectname is not nil
<% else %>
  @objectname is nil
<% end %>
EOS

@objectname = nil
ERB.new(template, nil, '>').result # => "  @objectname is nil\n"

@objectname = 'some name'
ERB.new(template, nil, '>').result # => "  @objectname is not nil\n"

Если вам явно нужно проверить nil, а не false, вы можете использовать метод #nil?, для которого nil является единственным объектом, который заставит его возвращать true.

nil.nil?          # => true
false.nil?        # => false
Object.new.nil?   # => false

Ответ 5

Вы можете использовать простой флаг not для подтверждения этого. Пример

if [email protected]

Это вернет true, если @objectname равно nil. Вы не должны использовать оператор точки или значение nil, иначе он выдаст

*** NoMethodError Exception: undefined method 'isNil?' for nil:NilClass

Идеальная проверка на ноль будет выглядеть так:

[email protected] || @objectname.nil? || @objectname.empty?