2012-03-16 10 views
0

私は作成後数日以内に「終了」しなければならない多くのモデルを用意しています。 私はbefore_filterを作って、完了して終了すべきすべてのモデルを見つけ出しました。 問題は、同じものの仕様書を書く方法を理解できないことです。 (擬似検証):rails、mock before_filter

validates :till, date: { later_than: 2.days.from_now.to_date, earlier_than: 8.days.from_now.to_date } 

before_filterは次のようになります。

@models = Model.where(['till <= ? AND finished = ?', Time.now.to_date, false]) 
    @models.each do |model| 
    model.update_attributes(finished: true) 
    end 
end 

だから(私のbefore_filterは私が偽の日付でそれを保存することができますテストされたモデルを見つけ作るために モデルは次のように検証されますつまり、5.days.ago)validate: false

しかし、フィルタ前に、update_attributesの呼び出しは、モデルの日付が間違っているためfalseを返します。

before_filterが単一のテストケースのコンテキストで検証をスキップする方法を教えてください。

+1

あなたの検証は作成時にのみ行われ、更新時には行われませんか? – phoet

+0

私はそれを受け入れることができるので、明らかに..答えとしてこれを追加してください –

答えて

1

before_filterupdate_attributesを呼び出すと、それがトリガーされないように、:on => :createを検証に追加する必要があります。

関連する問題