0

我有一个 rake 任务,应该更新数据库中的记录,但无济于事。从 rake 调用时它的工作方式是否有所不同?

这是我所拥有的,它运行没有错误,但它不会更新数据库中的记录

task :remove_vintage_from_slugs => :environment do
 wine = Wine.find_by_id(22)
 wine.slug = "new value"
 wine.save
end

更新

葡萄酒。保存!返回真?
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!=> 真

4

1 回答 1

1

两件事情:

  1. 默认情况下,保存始终运行验证。如果其中任何一个失败,则取消操作并保存返回 false。但是,如果您提供 :validate => false,则完全绕过验证。

  2. 有一系列与保存相关的回调。如果任何 before_* 回调返回 false,则取消操作并且 save 返回 false。

在控制台中检查保存是否由于某种原因返回 false。更好的是你应该使用保存!(一声巨响)。带保存!验证始终运行。如果其中任何一个失败,ActiveRecord::RecordInvalid 就会被提升。

于 2012-11-15T07:19:47.983 回答