1

作成日より後の日付フィールドを持つモデル Thing に仕様を書いているので、validate_timelinessプラグインをそのように使用します

validate_date :date, :after Time.now

前の日付でいくつかのものを追加できるようにしたいのですが、検証が失敗します。機械工工場でいくつかのモノを作成するときに、検証をバイパスしたいと考えています。

どんな手掛かり ?

4

4 に答える 4

0

うーん、マシニスト自体を使って簡単な方法はありません。しかし、それをだまそうとすることはできます... spec / spec_helperで、Machinistブループリントがロードされる前にThingモデルを再定義します。

class Thing

def before_validation
  self.date = 1.hour.from_now
end

end
于 2009-06-02T05:01:05.343 に答える
0

次のようにブール値パラメーター =true を指定して your_obj.save を呼び出すと、some_obj.save!(true)すべての検証がスキップされます。これはおそらく、私の会社で広く使用されている文書化されていない ActiveRecord 機能です:)

于 2009-06-01T23:03:30.570 に答える
0

検証によってスローされた例外をキャッチできます。機械工を要求した後、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
于 2010-04-20T18:29:35.867 に答える