2012-03-16 62 views
0

我有很多模型應該在創建後的幾天內「完成」。 我做了一個before_filter,找到應該完成並完成它們的所有模型。 問題是,我無法弄清楚如何編寫相同的規格。 這些模型進行了驗證這樣的:(僞驗證):rails,模擬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 2012-03-16 15:58:10

+0

omg,非常明顯..隨時添加此作爲答案,所以我可以接受它 – 2012-03-16 16:45:22

回答

1

您應該添加一個:on => :create到您的驗證,所以在您的before_filter呼叫update_attributes不會觸發它。