2012-04-30 103 views
0

我把這個在我的移民文件中「DEF上)」遷移數據未保存

User.find(:all).each do |user| 
    user.login = user.name 
    user.save 
end 
User.find(:all).each do |user| 
    puts user.login 
end 

我知道user.name絕對不是空的。對於這段代碼,第二個循環仍然沒有打印任何內容。任何想法?

+0

它對我不明確,所以如果你會解釋試圖在這裏做?進一步看看[這裏](http://guides.rubyonrails.org/contributing_to_ruby_on_rails.html) – CuriousMind

+0

你可以發佈你的所有遷移以便更好地瞭解情況嗎? – Flexoid

回答

0

由於驗證錯誤,用戶可能尚未保存。

如果不想處理驗證錯誤,則應使用爆炸版本進行保存(user.save!)。這意味着你會得到一個錯誤。

要防止驗證,您可以在遷移中定義模型。

class CopyUserNameToLogin < ActiveRecord::Migration 

    class User < ActiveRecord::Base 
    end 

    def up 
    User.find_each do |user| 
     user.login = user.name 
     user.save! 
    end 
    end 

    def down 
    raise ActiveRecord::IrreversibleMigration 
    end 

end 

提示:使用find_each做到讓用戶分批,這將減少內存使用。

提示2:您可能想要使用事務。