我有一个rake任务应该更新数据库中的记录,但无济于事。从rake调用时它是否有效?
这是我所拥有的,它运行没有错误,但它不会更新db
中的记录task :remove_vintage_from_slugs => :environment do
wine = Wine.find_by_id(22)
wine.slug = "new value"
wine.save
end
wine.save!返回true?
1.9.2-p318:001> wine = Wine.find_by_id(23)
1.9.2-p318:002> wine.slug =“测试”
1.9.2-p318:003> wine.save!
=>真的
答案 0 :(得分:1)
两件事:
默认情况下,保存始终运行验证。如果其中任何一个失败,则取消操作并保存返回false。但是,如果您提供:validate =>是的,完全绕过了验证。
有一系列与save相关的回调。如果任何before_ *回调返回false,则取消操作并且save返回false。
在控制台中检查保存是否因某种原因返回false。更好的是你应该使用保存! (砰的一声)随着保存!验证总是运行。如果其中任何一个失败,则会引发ActiveRecord :: RecordInvalid。