例えば、Sequel::Model を使って次のようなクラスを定義したとします。
# coding: utf-8 require "sequel" DB = Sequel.sqlite("test.db") DB.create_table? :records do primary_key :id Date :date String :summary Float :kcal DateTime :created_at end class Record < Sequel::Model plugin :validation_helpers def validate validates_presence [:summary, :kcal, :date] validates_numeric :kcal validates_type Date, :date validates_type String, :summary validates_type DateTime, :created_at end end
このクラスに対して
Record.new(:kcal => "hoge")
とか
@record = Record[id] @record.set(:kcal => "hoge")
とかやると、Float に変換できないため例外が発生してしまいます。
入力はとりあえず何でも受け付けて、検証してみてエラーだったらメッセージを表示したいので、セットしたときに例外を出されたら都合が悪い。
そこで、キャストできなかったとき例外が発生するのを抑制してみます。
Sequel::Model.raise_on_typecast_failure = false
これで OK。ActiveRecord と同じ感覚で使っていたから、ハマってしまいました。