Sequelでの一意制約(validation)
Sequelで複数行をinsertするときに、各行ごとに一意制約違反をチェックしたかったので。
以下のサンプルのように、:textが共通で、:idのみ異なるデータを複数登録するときにこんなふうにしてみた。
class Hoge < Sequel::Model plugin :validation_helpers def validate validates_unique [:id, :text] end unless table_exists? set_schema do integer :id text :text hard end create_table end end [1,2,3].each do |i| hoge = Hoge.new( :id => i, :text => "hoge", ) if hoge.valid? Hoge.insert(hoge) else hoge.errors end end
validates_unique [:id, :text]と配列で表記すると、いずれも同一の場合のデータのみ弾くようになる。
validation自体はうまく動作しているみたいだが、hoge.errorsで空の配列しか返されない。
エラーメッセージはどこで指定すればいいんだろ。