Ruby on rails 活动记录忽略迁移中的新属性
当我通过迁移助手创建新列并通过ruby活动记录模型代码设置值时。即使更改是有效的,并且ruby对象数据看起来很好,但新属性毕竟不是通过ActiveRecord保存的 这就是我正在做的细节: 我正在将新列添加到用户模型的模式中:Ruby on rails 活动记录忽略迁移中的新属性,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,当我通过迁移助手创建新列并通过ruby活动记录模型代码设置值时。即使更改是有效的,并且ruby对象数据看起来很好,但新属性毕竟不是通过ActiveRecord保存的 这就是我正在做的细节: 我正在将新列添加到用户模型的模式中: add_column :users, :billing_day_of_month, :integer 紧接着,在我的迁移文件中,我想按照一个简单的ruby公式填充这个新列: User.customers.each do |u| day = nil if u.l
add_column :users, :billing_day_of_month, :integer
紧接着,在我的迁移文件中,我想按照一个简单的ruby公式填充这个新列:
User.customers.each do |u|
day = nil
if u.last_charged_at
day = u.last_charged_at.day
else
day = u.plan_started_at.day
end
u.billing_day_of_month = day
puts "precheck #{u.id} #{u.valid?}"
if u.save
puts "saved #{u.id} -> #{u.billing_day_of_month}"
else
puts "not saved #{u.errors.inspect}"
end
end
所有产出看起来都很有希望:
precheck 399 true
saved 399 -> 22
precheck 414 true
saved 414 -> 9
precheck 203 true
saved 203 -> 8
precheck 439 true
saved 439 -> 21
遗憾的是,模型中的值未通过ActiveRecord保存:
SQL (0.4ms) UPDATE "users" SET "updated_at" = $1 WHERE "users"."id" = $2 [["updated_at", "2016-01-15 13:01:04.966681"], ["id", 399]]
SQL (0.4ms) UPDATE "users" SET "updated_at" = $1 WHERE "users"."id" = $2 [["updated_at", "2016-01-15 13:01:04.969648"], ["id", 414]]
SQL (0.4ms) UPDATE "users" SET "updated_at" = $1 WHERE "users"."id" = $2 [["updated_at", "2016-01-15 13:01:04.972547"], ["id", 203]]
SQL (0.4ms) UPDATE "users" SET "updated_at" = $1 WHERE "users"."id" = $2 [["updated_at", "2016-01-15 13:01:04.975492"], ["id", 439]]
所以我四处搜索,发现User.attribute\u names
缺少新的属性名billing\u day\u of\u month
。在这次迁移之后使用rails控制台时,User.attribute\u names
不包含新的属性名
顺便说一句,在迁移时,schema.rb确实包含新列
有人知道我遗漏了什么吗我已经在通过模型的同一迁移中使用了新的COL,并且它始终有效。尝试在更新循环之前添加
User.reset\u column\u information
。有关更多详细信息,请参阅