如何在现有Ruby模型上创建字段而无需迁移

edqdpe6u  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(71)

我有一个现有的模型,在生产中有超过1,000,000个大对象。我需要在这个模型中添加一个新字段,在这里迁移不是一个理想的选择。是否有一种方法可以添加此字段并慢慢填充它?
理想情况下,我会有一个这样的模型类

class Car
    
    field :name, type: String

end

我可以添加一个字段并在每次使用时填充它?

class Car
    
    field :name, type: String
    field :year, type: String

    def year

        @year ||= '1997' 
    end
end

有什么建议,这是否可行?我想这是开发人员遇到的一个常见问题,我想知道解决这个问题的正确方法。

vqlkdk9b

vqlkdk9b1#

我最终遵循了@BenTrewern关于使用默认值的建议。所以我创建了一个私有方法并在默认情况下调用它。

class Car

    field :name, type: String
    field :year, type: String, default: -> { year }

    private

    def year

        '1997' 
    end
end

这不需要迁移,只是一个简单的更改。我想知道如果我们的默认方法依赖于另一个字段,这会有什么影响。如果另一个字段发生更改,我将如何处理更新此字段?

class Car

    field :name, type: String
    field :name_and_year, type: String, default: -> { name_and_year }

    private

    def name_and_year

        name + ' ' + '1997' 
    end
end

在这个例子中,假设Car ['name'] = 'Toyota' Car ['name_and_year']默认为'Toyota 1997',但是如果我们将Car ['name']更改为'本田',那么Car ['name_and_year']将仍然是'Toyota 1997',我们可以使用after_touch,但是这样每次都会更新它,而不是只有在名称字段更改时才更新

相关问题