Rails迁移:如何在迁移中合成刚刚创建的列的方法?

时间:2011-10-25 04:01:37

标签: ruby-on-rails migration

我有一张需要新栏目的表格。新引入的列需要一些值,可以从行中的其他字段计算。默认没有帮助。

所以,我创建了两个迁移(可能是一个):

  1. 添加一列(例如:new_column)
  2. 使用attr_accessor
  3. 更新列

    如果我逐个运行这些迁移,它运行没有问题。

    但是,当我使用单个迁移请求运行两次迁移以进行rake时,看起来迁移1后attr_accessor未合成,因此第2步失败。

    目前,我多次拨打rake(每次,在迁移后停止,如上面的步骤1) 为了避免这种情况。

    我想我可以在开始使用之前合成attr_accessor,但不知道在这种情况下最佳做法是什么。

    解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您应该在迁移中的类上调用reset_column_information,这将重新加载该类中的列。

理想情况下你应该这样做:

add_column :posts, :rank
Post.reset_column_information
# calculate rank here

不要对数据库中的任何真实列使用attr_accessor 。这将覆盖列的默认setter和getter方法,并且意味着尝试将任何值设置为此列将不起作用。这是因为您现在使用的是虚拟属性,而不是真实属性。