作成日より後の日付フィールドを持つモデル Thing に仕様を書いているので、validate_timelinessプラグインをそのように使用します
validate_date :date, :after Time.now
前の日付でいくつかのものを追加できるようにしたいのですが、検証が失敗します。機械工工場でいくつかのモノを作成するときに、検証をバイパスしたいと考えています。
どんな手掛かり ?
作成日より後の日付フィールドを持つモデル Thing に仕様を書いているので、validate_timelinessプラグインをそのように使用します
validate_date :date, :after Time.now
前の日付でいくつかのものを追加できるようにしたいのですが、検証が失敗します。機械工工場でいくつかのモノを作成するときに、検証をバイパスしたいと考えています。
どんな手掛かり ?
うーん、マシニスト自体を使って簡単な方法はありません。しかし、それをだまそうとすることはできます... spec / spec_helperで、Machinistブループリントがロードされる前にThingモデルを再定義します。
class Thing
def before_validation
self.date = 1.hour.from_now
end
end
次のようにブール値パラメーター =true を指定して your_obj.save を呼び出すと、some_obj.save!(true)
すべての検証がスキップされます。これはおそらく、私の会社で広く使用されている文書化されていない ActiveRecord 機能です:)
検証によってスローされた例外をキャッチできます。機械工を要求した後、spec_helper で次のコードが必要な場合。これを使用するには、#make の最初の引数として false を追加します。
module Machinist
module ActiveRecordExtensions
module ClassMethods
def make_with_skip_validation(*args, &block)
validate = !(!args.pop if ( (args.first == true) || (args.first == false) ))
begin
make_without_skip_validation(*args, &block)
rescue ActiveRecord::RecordInvalid => invalid
if validate
raise invalid
else
invalid.record.save(false)
end
end
end
alias_method_chain :make, :skip_validation
end
end
end