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

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

Я попытался это:

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

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

4 ответов


это nilв Ruby, не null. И достаточно сказать if @objectname чтобы проверить, так ли это не nil. И нет!--3-->. Вы можете найти больше на if синтаксис здесь:

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if


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

@object.present?

это вернет false, если проект является пустой строкой или нулем .

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

@object.blank?

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


теперь с 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

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

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/ и поиск " пустой?- вот увидишь. на каких объектах он определен и как он работает. Глядя на определение объекта, мы видим " объект пуст, если он false, пуст или строка пробелов. Например,"","", 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