baronyan's blog

linux,macでruby、railsでの開発をしていく中で知ったこと、備忘的なことなどを書いていきます。

ActiveRecord経由でidを付け替える方法

book = Book.find(1)
book.id = 35
book.save

とするとidを変更できそうなものですが、uniqueness制約を付けている場合、
そのuniquenessカラム群がユニークであるにも関わらず、自分自身を指して
「uniquenessカラムが同じで別idのレコードが存在する」と更新を弾かれてしまします。

そんな場合には以下のようにすることで、更新することができます。

book = Book.find(1)
book.id = 35
book.update_all(["id = 1", "id = 35"])