如何确定对象是“先”还是“已创建”?

时间:2012-07-14 15:48:58

标签: ruby ruby-on-rails-3

我在长时间运行的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时确定对象是“第一个”还是“已创建”?

2 个答案:

答案 0 :(得分:2)

你可以使用 object .persisted?object .new_record?进行检查。

如果对象已经在db中,则

object .persisted?返回true,

如果新创建了对象,

object.new_record?将返回true。

答案 1 :(得分: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

这种方法与你正在做同样的事情。