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 が返されますが、更新が保存されていないため、db がロールバックされていると思います。