activerecord-importを使ってバルクインサートを実施したいのですが、uniquenessのバリデーションが効かなくて困っています。
具体的には
class CreateAccount def self.execute accounts = [] 10.times do |row| accounts << Account.new( email: 'hogehoge@example.com' ) end Account.import(accounts) end end
class Account < ApplicationRecord validates :email, presence: true, uniqueness: true end
class CreateAccounts < ActiveRecord::Migration[5.0] def change create_table :accounts do |t| t.string :email, null: false t.timestamps end add_index :accounts, :email, unique: true end end
実行するとデータベースのUNIQUE制約に引っかかり例外エラーが出るのですが、アプリケーションのバリデーションエラーが発生しません。
-
そもそもバリデーションが効いていないのかと思いuniqueness以外のバリデーションを試してみたところ、それは効きました。
-
activerecord-importを使わず、通常の方法でnew→saveしたところuniquenessのバリデーションエラーが発生しました。
なぜこうなってしまうのかご教授ください。
rails (5.0.3)
ruby (2.4.0)
activerecord-import (0.18.3)

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。