1

目前,我有一个 User 对象,它有一个 field realname。我正在尝试拆分空间并将其转换为两个字段,first_name并且last_name. 下面是我为此编写的脚本:

User.all.each do |user| 
  puts "Updating #{user.realname}"
  name = user.realname.split(' ')

  user.first_name = name[0]
  user.last_name = name[1]

  user.save
  puts "Saved #{user.first_name} #{user.last_name}"
  sleep(1)
end

当我在我的开发环境中使用 rails runner 运行它时,许多前半部分用户没有得到更新。虽然脚本的输出很完美,但当我查看 mongo 中保存的内容时,有些用户没有这些新字段。

4

2 回答 2

1

你确定这些用户是有效的吗?

尝试使用user.save!而不是user.save.

如果你想保存它,那么你可以通过调用绕过验证:

user.save(validate: false)
于 2012-08-15T02:26:15.353 回答
0

尝试在您的 User 类上查找更改的 default_scope。

如果默认范围已更改,则 User#All 将不意味着“数据库上可用的所有对象”。

于 2012-08-14T19:05:47.050 回答