我在长时间运行的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时确定对象是“第一个”还是“已创建”?
答案 0 :(得分:2)
你可以使用
object .persisted?
或object .new_record?
进行检查。
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
这种方法与你正在做同样的事情。