コードが機能しないのはなぜですか?
このwhere
メソッドはActiveRecord :: Relationshipオブジェクト(の結果を含む配列のように機能します)を返します。空where
にすることはできますが、になることはありませんnil
。
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
少なくとも1つのレコードが存在するかどうかをテストするにはどうすればよいですか?
オプション1:使用.exists?
if Business.exists?(user_id: current_user.id)
else
end
オプション2:を使用する.present?
(または.blank?
、の反対.present?
)
if Business.where(:user_id => current_user.id).present?
else
end
オプション3: ifステートメントでの変数の割り当て
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
このオプションは、一部のリンター(Rubocopなど)ではコードの臭いと見なすことができます。
オプション3b:変数の割り当て
business = Business.where(user_id: current_user.id).first
if business
else
end
.find_by_user_id(current_user.id)
代わりに使用することもできます.where(...).first
最良のオプション:
Business
オブジェクトを使用しない場合:オプション1
Business
オブジェクトを使用する必要がある場合:オプション3
where
レコードがない場合、を使用すると空の配列が返されます。そして[]
等しくないnil