在rails 2中,active_records上有一个名为create_without_callbacks的私有方法,您可以调用该方法将记录保存到数据库中,而不会触发与该对象关联的回调。这种方法在rails 3中已经消失了,有什么办法可以实现同样的目的吗?
答案 0 :(得分:2)
当您拨打create_without_callbacks
时,您正在阻止某些业务逻辑发生。如果不需要,请考虑删除回调,或者仅在需要时使用:if
和:unless
选项触发回调。
答案 1 :(得分:0)
我不知道所有这些是否仍然适用于R3,至少在2.3.8中是这样的。
如果它只是一个属性,那么
self.update_attribute(:attribute, value)
如果它是一个对象的多个属性
self.update_attributes({:attribute => value})
您还可以使用某些条件更新所有记录
update_all( "category = 'authorized' approved = 1, author = 'David'" )
我刚从rails API中获取的最后一个,我认为它不会调用回调,但我不确定。
答案 2 :(得分:0)
查看了rails3的源代码后,似乎回调的方式是使得model.save方法实际上并不知道它们。
我选择的解决方案是模拟Model.find并返回一个尚未保存的实例。这实际上是应该如何进行单元测试,并且它们可以更快地启动。
如果你有兴趣找到一个黑客,我建议你看看
。
答案 3 :(得分:0)
你可以使用偷偷摸摸的宝石:https://rubygems.org/gems/sneaky-save