web-dev-qa-db-ja.com

オブジェクトがRuby on Rails 2?

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

私はこれを試しました:

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

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

41
George Panayi

rubyのnilではなく、nullです。そして、if @objectname nilではないかどうかをテストします。 thenもありません。 if構文の詳細については、次を参照してください。

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

56
Pavel Veller

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

@object.present?

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

または使用できます

@object.blank?

これは現在と同じですか?強打で、あなたが 'unless'が好きでないなら、それを使うことができます。これは、空の文字列またはnilに対してtrueを返します。

38
lesce

ここで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
12
Chloe

あなたの例では、単に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の定義 を見ると、」と表示されます。 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?メソッド。nilがtrueを返す唯一のオブジェクトです。

nil.nil?          # => true
false.nil?        # => false
Object.new.nil?   # => false
5
Joshua Cheek

単純なnotフラグを使用して、それを検証できます。例

if !@objectname

@objectnameがnilの場合、これはtrueを返します。あなたはドット演算子またはnil値を使用しないでください、そうでなければスローします

*** NoMethodError例外:未定義のメソッド `isNil? ' nil:NilClassの場合

理想的なnilチェックは次のようになります。

!@objectname || @objectname.nil? || @objectname.empty?
0