1

長時間実行される rake タスクの一部のコードをリファクタリングしました。私はこのコードを持っていました:

if object = Object.find_by_name(name: "string")
else
  object = Object.create(name: "string")
  puts "#{object.name} created"
end

今、私はこのコードを持っています:

object = Object.where(name: "string").first_or_create

これは改善だと思います。しかし、実行時間の長い rake タスクに puts ステートメントがありません。first_or_create を使用する場合、オブジェクトが「最初」または「作成」されたかどうかを判断するにはどうすればよいですか?

4

2 に答える 2

2

object .persisted? またはを使用 object .new_record?して確認できます。

object .persisted?オブジェクトがすでに db にある場合は true を返します。

object.new_record?オブジェクトが新しく作成された場合、true を返します。

于 2012-07-14T15:59:04.867 に答える
1

@xdazzの回答に加えて、ActiveRecordには

obj = Model.find_or_create_by_name("String")
obj.persisted? #=> false
obj.save
obj = Model.find_or_create_by_name("String")
obj.persisted? #=> true

このメソッドは、あなたがしていることと同じことを行います。

于 2012-07-14T17:36:11.237 に答える