【问题标题】:How to Skip Devise Confirmation email using SeedFu gem如何使用 SeedFu gem 跳过设计确认电子邮件
【发布时间】:2017-11-04 02:32:54
【问题描述】:

我正在使用 Seed-Fu gem 来填充我的数据库。所以,我在我的一个种子文件中有这个:

User.seed_once(:email) do |user|
  user.id = 1
  user.email = "test@test.com"
  user.first_name = "First"
  user.last_name = "Last"
  user.confirmation_sent_at = Time.zone.now - 1.hour
  user.confirmed_at = Time.zone.now
  user.roles = [root,staff]
  user.permissions = Permission.all
end

据我所知,应该阻止 Devise 发送确认电子邮件。然而,事实并非如此,所以(因为我使用的是 Letter Opener gem)我的浏览器充斥着确认电子邮件。任何人都知道为什么会发生这种情况以及我如何说服 Devise 在我播种时不要发送这些电子邮件?

解决方案:

根据下面另一个mh 的回答,我将Devise::Mailer.perform_deliveries = false 添加到此夹具文件的顶部。然后,我找到了我的最终固件文件,并在其末尾添加了Devise::Mailer.perform_deliveries = true,以确保在实际使用该应用程序时发送电子邮件。非常感谢各位!

【问题讨论】:

    标签: ruby-on-rails ruby devise seeding


    【解决方案1】:

    您只需要在用户对象上调用 confirm 方法。请看下面的代码

    user.confirm
    

    所以在你的情况下,代码会像

    User.seed_once(:email) do |user|
      user.id = 1
      user.email = "test@test.com"
      user.first_name = "First"
      user.last_name = "Last"
      user.confirm 
      user.roles = [root,staff]
      user.permissions = Permission.all
    end
    

    【讨论】:

    • 不幸的是,这给了我一个错误NoMethodError: undefined method 'confirm' for #<SeedFu::BlockHash:0x007fa8f0207da8>。我认为这是因为 SeedFu gem 使“用户”变量成为一种用于设置属性的特殊对象。不过,谢谢!
    【解决方案2】:

    您可以turn off email sends from Devise in tests。具体来说,您需要在某处进行此设置:

    Devise::Mailer.delivery_method = :test
    Devise::Mailer.perform_deliveries = false
    

    例如,如果您使用 rspec 执行此操作,那么您可能会将其放入 spec/rails_helper.rb

    【讨论】:

    • 不幸的是,这不在测试中。这是应用程序的主要装置。当我在本地机器上工作时,我使用这些装置来设置数据库。
    • 话虽如此,只将第二行放在夹具文件的顶部就可以了!我把相反的东西放在我的最后一个装置的末尾,以确保在实际使用该应用程序时发送电子邮件。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2016-03-03
    相关资源
    最近更新 更多