2012-03-16 36 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不会触发它。