5

私のコントローラーの1つで、私はやっています:

user = User.find_or_initialize_by_email(@omniauth['info']['email'])

次に、レコードが見つかったか初期化されたかを知る必要があります。私はこれを試しました:

if user
else
end 

しかし、常にユーザーが存在するため、それは機能しません。検索または初期化が見つかったか初期化されたかを知る正しい方法は何ですか?

ありがとう

4

2 に答える 2

9

使用できるはずですpersisted?

if user.persisted?

edgeguides.rubyonrails.orgは、について次のように述べていますfind_or_initialize_by

find_or_initialize_by メソッドは find_or_create_by と同じように機能しますが、create ではなく new を呼び出します。これは、新しいモデル インスタンスがメモリ内に作成されますが、データベースには保存されないことを意味します。

于 2013-08-10T17:03:24.127 に答える
4

@ pdoherty926の答えに代わる方法は、new_record?メソッドを使用することです。

if user.new_record?

ただし、それは反対の真の値を返すpersisted?ため、条件付きロジックでどちらが機能するかを選択できます。(たとえば、私は時々ifよりも読みやすいと思う傾向があります。)unless

于 2013-08-10T17:52:13.050 に答える