我目前正在尝试编写一个rake任务,在将管理员(特定类型的设备用户)复制到新服务器时重置我的数据库。
task :safe_reset => :environment do
desc "Resets db while persisting admins."
user_collection = []
User.all.each do |user|
if user.admin?
user_collection << user.attributes
end
end
Rake::Task['db:reset'].invoke
user_collection.each do |user|
User.create!(user)
end
end
但是,密码信息不是用户的公共属性。所以我没有足够的信息来创建一个新用户。
有没有办法获取密码信息,或者最好是否有办法实现这一点,同时避免将每个管理员减少到哈希对象?
答案 0 :(得分:1)
不应该这样做。通常情况下,应用程序是播种的#39; (在db / seeds.rb中)具有一个管理用户帐户。应用程序上线后,开发人员使用该帐户传播其他必要的帐户,并将其详细信息更改为默认值以外的其他帐户。我没有看到像这样持久保存这样一个表的任何优点或好处db:reset通常从不用于生产或登台,并且经常用于开发。在开发过程中,我们使用种子数据为我们生成帐户。
可以这样做,具体取决于你的身份验证解决方案,但我强烈建议不要这样做,除非它有一个很好的用例。
答案 1 :(得分:1)
您无法获取原始密码信息。但是你可以获得加密密码......
替换
user_collection.each do |user|
User.create!(user)
end
通过这个
user_collection.each do |user|
encrypted_password = user.delete('encrypted_password')
u = User.create!(user.merge({
:password => "Foobar",
:password_confirmation => "Foobar"
})
u.update_attribute(:encrypted_password, encrypted_password)
end