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 回答