我有一个名为Product的模型。
p = Product.new(...) and
p.save
我想要完成以下内容:
如果有其他产品具有相同的ID(不是pk),那么我们会更新产品,否则我们会创建一个新产品。
我认为这可以在before_save回调中完成!?
我试过这样的
before_save :try, on: :create
def try
p = Product.where(id: self.id).first
p and p.update_attributes(...) and return false
*1
end
* 1,此时,属性已更新,它返回false表示未创建新模型,但我认为数据库已回滚,因为未保存更新。
答案 0 :(得分:3)
您可以使用find_or_create
(或find_or_initialize
仅初始化而不保存实例。
另外:我不会创建一个名为try
的方法,因为它已经存在以尝试一个方法,如果它不存在则返回nil(而不是异常)。
例如:
Product.find_or_create(self.id)
答案 1 :(得分:1)