Kir*_*ein 32 ruby migration ruby-on-rails
我正在尝试在我的Rails应用程序中转换一个列,为了参数,让我假装我试图将age我的users表中的列更改为字符串表示而不是int.
在我的迁移中我有这个;
def.self up
add_column :users, :age_text, :string
users = User.find(:all)
users.each do |u|
u.age_text = convert_to_text(u.age)
u.save
end
end
def self.convert_to_text(number)
#code here to convert 1 to 'one' etc
end
Run Code Online (Sandbox Code Playgroud)
但它似乎没有起作用,我在这里尝试甚至可以进行迁移吗?
Edu*_*coz 58
你想做的事情是可能的,我会说正确的事情.
但是,您需要重新加载要在迁移中更新的模型类的列信息,以便Rails了解新列.试试这个:
def.self up
add_column :users, :age_text, :string
User.reset_column_information
users = User.find(:all)
users.each do |u|
u.age_text = convert_to_text(u.age)
u.save
end
end
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您的桌子很大,逐个更新需要花费很长时间.请注意.
Bri*_*gan 39
由于我是新来的,我无法对上述内容发表评论,因此我将添加自己的答案.
通常在迁移中操纵数据是一个不好的想法.如果模型逻辑发生变化,直接模型访问的迁移可能会卡住.
想象一下,在第二次迁移中,您添加了一个新列.您希望使用新数据为该列添加种子.
我们还要说几周之后,您会为模型添加一个新的验证 - 对第二次迁移中尚不存在的字段进行验证.如果您曾经从迁移0构建数据库,那么您会遇到一些问题.
我强烈建议使用迁移来更改列和其他方法来管理数据库数据,尤其是在转移到生产时.
| 归档时间: |
|
| 查看次数: |
13780 次 |
| 最近记录: |