为Heroku上的现有Devise用户创建一个Profile对象

时间:2014-08-27 20:42:26

标签: ruby-on-rails ruby-on-rails-3 heroku devise

我刚为我的Devise用户创建了名称,网站,生物等属性的个人资料模型。一切都很好,除了Heroku之外,我已经有100多个用户了,所以1.创建一个新的Profile,2。将它分配给现有用户3.保存,全部都在控制台中相当繁琐。

我不熟悉你可以在Heroku控制台中做什么,如果这是可能的 - 但是我可以为每个现有用户(还没有配置文件)大量创建100多个新配置文件。

现在,任何包含Profile info(即user.profile.name)的视图都会给我一个错误 - 我宁愿创建一个空白配置文件,而不是强制用户在界面中创建一个新配置文件。

Rails 3.2.12

user.rb

class User < ActiveRecord::Base
after_create :build_profile
attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :role, :profile_attributes
has_one :profile, dependent: :destroy
accepts_nested_attributes_for :profile

profile.rb

class Profile < ActiveRecord::Base
attr_accessible :bio, :name, :website, :user_id

belongs_to :user

2 个答案:

答案 0 :(得分:1)

在heroku上安装rails控制台:

heroku run rails console

另一种解决方案可能是创建迁移CreateProfileForUsers并在部署时将其迁移到您的产品上:

def up
  User.all.each do |user|
    if user.profile.nil?
       user.build_profile
    end
  end
end

def down
end

修改

我刚刚了解到为此使用迁移是一种不好的做法!最好创建一个rake任务来构建您的配置文件,并在部署后立即运行它。

答案 1 :(得分:0)

我在lib / tasks下创建了一个文件add_profile_to_users.rake:

task :add_profile_to_users => :environment do
    User.all.each do |u| #where no profile
        puts "Updating user id #{u.id}..."
            if u.profile.nil?
               u.build_profile
           else
                puts "skip"
            end
        puts "...#{u.name} has been updated!" if u.save
    end
end

我从控制台运行:rake add_profile_to_users

这也适用于heroku。