9

ruby on rails を使用していて、クエリが値を返すかどうかを確認しようとしています。

これはクエリです:

@search = Customer.find_by_name($login_name)

クエリが結果を見つけた場合、すべて問題ありませんが、空の結果にどのように対応できますか?

私は試した:

if @search.empty?
  flash[:notice] = 'Username nicht bekannt'
  redirect_to :action => :login
end

しかし、私はエラーが発生します:

undefined method `empty?' for nil:NilClass

何がうまくいかなかったのですか?

ありがとうございました!!!

4

2 に答える 2

30

これを使用して、空のケースだけでなく nil もチェックします。

@search.blank?

逆の場合 (NOT nil および NOT empty) の場合、.present?を使用します。:

@search.present? #equivalent of !@search.blank?

nil 代わりにクエリが返された理由emptyは次のとおりです。

Customer.find_by_name($login_name)

オブジェクトの結果を常に 1 つ返すかCustomernilそのような結果がない場合は、

次のような間:

Customer.where(:name=>$login_name)

ActiveRecord::Relationあなた(0-nの結果を持つことができます)を常に返します。そしてempty? メソッドはそれで動作します

于 2012-12-09T18:21:46.563 に答える
2

結果が見つからない場合find_by_name、空の配列ではなく nil オブジェクトを返します。Ruby では nil は偽であるため、顧客が見つかったかどうかを確認するには、if @search.nil?単にif !@searchorを使用できます。unless @search

@search = Customer.find_by_name($login_name)
unless @search
  flash[:notice] = 'Username nicht bekannt'
  redirect_to :action => :login
end
于 2012-12-12T16:35:28.907 に答える