即使我没有更改任何属性,如何强制记录保存自己

Rog*_*ger 13 ruby-on-rails

为了清理一些不良数据,我在保存回调之前添加了一个.现在我需要强制所有模型再次保存.但是,如果我这样做,则不会发生更新操作

User.first.save
Run Code Online (Sandbox Code Playgroud)

即使我没有更改任何属性,如何强制所有模型执行保存操作.

cwn*_*nja 24

你应该可以使用touch,它会在保存时触发回调.

或者关闭partial_updates: ActiveRecord::Base.partial_updates = false

  • touch似乎不再执行回调,至少在rails 3.03中,文档说:"使用设置为当前时间的updated_at/on属性保存记录.请注意,不执行任何验证,也不执行回调.传递属性名称,该属性与updated_at/on属性一起更新." (17认同)

par*_*pet 16

由于Josh Rickard评论了接受的答案,因为Rails 3.0.X touch不再调用验证和回调.

但是,您可以手动"触摸"它model.update_attribute(:updated_at,Time.now)并跳过验证并以这种方式调用回调.