【发布时间】:2012-01-20 00:31:20
【问题描述】:
我有一个运行良好的 add_column 迁移。但是,在运行它并启动控制台后,我会发现 first_name 和 last_name 列完全为空。我尝试改用save!,效果相同——没有报告错误。原文如下:
class UserAddFirstNameAndLastName < ActiveRecord::Migration
def change
# add column first name, last name string
add_column :users, :first_name, :string
add_column :users, :last_name, :string
User.all.each do |u|
u.first_name = 'first name'
u.last_name = 'last name'
u.save
end
end
end
我还认为这可能是一些类加载问题,所以我插入了User 行以强制用户类在循环之前重新加载。没有骰子。
当我把它分成两个迁移时,达到了预期的效果。有人对此有解释吗?我发誓我什至在过去迁移的同一个项目中做过这个。
其他说明:为用户引擎设计,在运行迁移之前将新列添加到用户类中的attr_accessible。
【问题讨论】:
-
mu is too short 有一个很好的答案来解释正在发生的事情和做什么,但我也建议将这两个分成不同的迁移。在一个中创建列,在另一个中填充。这可以防止您看到的问题并使回滚更不容易出错。
标签: ruby-on-rails ruby-on-rails-3 activerecord rails-activerecord rails-migrations