我有一张需要新栏目的表格。新引入的列需要一些值,可以从行中的其他字段计算。默认没有帮助。
所以,我创建了两个迁移(可能是一个):
如果我逐个运行这些迁移,它运行没有问题。
但是,当我使用单个迁移请求运行两次迁移以进行rake时,看起来迁移1后attr_accessor未合成,因此第2步失败。
目前,我多次拨打rake(每次,在迁移后停止,如上面的步骤1) 为了避免这种情况。
我想我可以在开始使用之前合成attr_accessor,但不知道在这种情况下最佳做法是什么。
解决此问题的最佳方法是什么?
答案 0 :(得分:3)
您应该在迁移中的类上调用reset_column_information
,这将重新加载该类中的列。
理想情况下你应该这样做:
add_column :posts, :rank
Post.reset_column_information
# calculate rank here
不要对数据库中的任何真实列使用attr_accessor
。这将覆盖列的默认setter和getter方法,并且意味着尝试将任何值设置为此列将不起作用。这是因为您现在使用的是虚拟属性,而不是真实属性。