Как я могу проверить, является ли объект 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