我有一个rails应用程序,其中我们意外地计算了两次促销代码而不是一次。我能够在实际的代码库中解决问题,这样它就不会再发生了,但是我很难写一个迁移来重置所有旧的。我没有很多编写迁移的经验,更不用说改变它们了,所以我决定首先在实践中添加一个元素,然后将所有内容分成两半。
我写过我的迁移。 promo_codes
是表格的名称,times_used
是我最终希望减少的一半。
class PromoCodeTest1 < ActiveRecord::Migration
def change
change_column :promo_codes, update_attribute(:times_used + 1)
end
end
沿着这条路走下去,我最终得到update attribute
的未定义错误。有人知道我需要做些什么来实现这个目标吗?
答案 0 :(得分:1)
我从未在迁移中看到update_attribute
帮助器。
您只需要运行SQL查询(请注意 - 请不要使用ActiveRecord模型)。
它看起来像:
def up
execute "UPDATE promo_codes SET times_used = times_used / 2;"
end
如果columnd times_used
可以包含NULL
值或者有奇数值,则可能需要添加一些检查...