当我在迁移中更新用户信息时,Devise会发送一封电子邮件

时间:2014-06-04 19:26:21

标签: ruby-on-rails devise email-integration

在我的应用程序中,我使用迁移将一个新行添加到User表,作为users表的外键:

class AddProfileIdToUsersTable < ActiveRecord::Migration
  def change
    add_column :users, :profile_id, :integer
  end
end

然后在使用新创建的profile.id更新用户的profile_id之前,使用一些用户数据填充“个人档案”表:

class MigrateSomeUsersInfoToProfilesTable < ActiveRecord::Migration
  def up
    User.all.each do |u|
      profile = Profile.new({
        first_name: u.first_name,
        last_name: u.last_name,
        bio: u.bio,
        address: u.address,
      })
      profile.save!

      u.profile_id = profile.id
      u.save!
    end
  end
end

这成功地在配置文件表中插入值并更新用户表中的profile_id,但它也向每个用户发送电子邮件!这是日志:

2014-06-04 18:43:40.747 [INFO ] Rendered devise/mailer/confirmation_instructions.html.haml (21.5ms) (pid:2)
2014-06-04 18:43:41.725 [INFO ] Sent mail to xxxxxx@gmail.com (974.2ms) (pid:2)
2014-06-04 18:43:43.425 [INFO ] Rendered devise/mailer/confirmation_instructions.html.haml (1.1ms) (pid:2)
2014-06-04 18:43:44.197 [INFO ] Sent mail to yyyyyy@yahoo.com (769.8ms) (pid:2)
....

哪个很烦人!知道如何避免这种情况吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以在保存用户之前致电skip_confirmation

class MigrateSomeUsersInfoToProfilesTable < ActiveRecord::Migration
  def up
    User.all.each do |u|
      profile = Profile.new({
        first_name: u.first_name,
        last_name: u.last_name,
        bio: u.bio,
        address: u.address,
      })
      profile.save!

      u.profile_id = profile.id
      u.skip_confirmation!
      u.save!
    end
  end
end