Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 活动记录忽略迁移中的新属性_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 活动记录忽略迁移中的新属性

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

当我通过迁移助手创建新列并通过ruby活动记录模型代码设置值时。即使更改是有效的,并且ruby对象数据看起来很好,但新属性毕竟不是通过ActiveRecord保存的

这就是我正在做的细节:

我正在将新列添加到用户模型的模式中:

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
。有关更多详细信息,请参阅