1

現在、フィールドを持つUserオブジェクトがありますrealname。スペースを分割して2つのフィールドに変換しようとしてい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

開発環境でrailsrunnerを使用してこれを実行すると、ユーザーの前半の多くが更新されません。スクリプトからの出力は完璧ですが、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は「DBで使用可能なすべてのオブジェクト」を意味するわけではありません。

于 2012-08-14T19:05:47.050 に答える