编写迁移以更改特定列中的特定功能

时间:2015-12-01 19:27:35

标签: mysql ruby-on-rails

我有一个rails应用程序,其中我们意外地计算了两次促销代码而不是一次。我能够在实际的代码库中解决问题,这样它就不会再发生了,但是我很难写一个迁移来重置所有旧的。我没有很多编写迁移的经验,更不用说改变它们了,所以我决定首先在实践中添加一个元素,然后将所有内容分成两半。

我写过我的迁移。 promo_codes是表格的名称,times_used是我最终希望减少的一半。

class PromoCodeTest1 < ActiveRecord::Migration
  def change
    change_column :promo_codes, update_attribute(:times_used + 1)
  end
end

沿着这条路走下去,我最终得到update attribute的未定义错误。有人知道我需要做些什么来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

我从未在迁移中看到update_attribute帮助器。

您只需要运行SQL查询(请注意 - 请不要使用ActiveRecord模型)。

它看起来像:

  def up
    execute "UPDATE promo_codes SET times_used = times_used / 2;"
  end

如果columnd times_used可以包含NULL值或者有奇数值,则可能需要添加一些检查...