【问题标题】:Rails migration: how to synthesize methods for just created column in a migration?Rails 迁移:如何在迁移中为刚刚创建的列综合方法?
【发布时间】:2011-10-25 04:01:37
【问题描述】:

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

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

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

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

但是当我使用单个迁移请求来运行两个迁移时,看起来 attr_accessor 在迁移 1 后没有合成,因此步骤 2 失败。

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

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

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

【问题讨论】:

    标签: ruby-on-rails migration


    【解决方案1】:

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

    你最好这样做:

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

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

    【讨论】:

    • 非常感谢。有用。顺便说一句,我使用“attr_accessor”来表示 getter/setter。当然不是它自己。
    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2021-10-30
    相关资源
    最近更新 更多