57

@objectnameオブジェクトがnullに等しくない場合にチェックして、 @objectnameelseの値を表示し、値が見つからないことを示します。

私はこれを試しました:

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

しかし、エラーが発生します。

4

5 に答える 5

71

それnilはRubyにあり、ではありませんnull。そして、それif @objectnameがゼロでないかどうかをテストするために言うだけで十分です。そして、いいえthen。構文の詳細については、次を参照しifてください。

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

于 2012-04-29T11:27:30.017 に答える
43

present? を呼び出すことで、オブジェクトが nil (null) かどうかを確認できます。または空白?.

@object.present?

プロジェクトが空の文字列または nil の場合、これは false を返します。

またはあなたが使用することができます

@object.blank?

これは現在と同じですか?「unless」が気に入らない場合は、強打で使用できます。これは、空の文字列または nil に対して true を返します。

于 2012-04-29T11:34:45.387 に答える
16

Ruby 2.3 では、&.演算子 ('lonely operator') を使用し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
于 2015-05-23T21:14:40.197 に答える
5

あなたの例では、単に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/にアクセスして「blank?」を検索すると、それが定義されているオブジェクトとその動作がわかります。Objectの定義を見ると、「オブジェクトがfalse、空、または空白文字列の場合、オブジェクトは空白です。たとえば、「」、「」、nil、[]、および{}はすべて空白です。」これがあなたが望むものであることを確認する必要があります。

また、nilはfalseと見なされ、falseとnil以外はtrueと見なされます。これは、オブジェクトを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?メソッドでは、これがtrueを返す原因となるオブジェクトはnilだけです。

nil.nil?          # => true
false.nil?        # => false
Object.new.nil?   # => false
于 2012-04-29T14:33:02.413 に答える