Rails模型名称与包含的gem冲突

Cog*_*Sum 2 ruby ruby-on-rails ruby-on-rails-5

我们一直在嘲笑我们的电子邮件工作,直到我们真正将SendGrid Gem包含在我们的工作人员的顶端

require 'sendgrid-ruby'
include SendGrid

class Notifications::WelcomeWorker
  include Sidekiq::Worker

  def perform(email_id)

    emailAddr = Email.find(email_id)
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

问题似乎出现,因为SendGrid在(电子邮件)中具有相同的模型

从而生成消息

undefined method `find' for SendGrid::Email:Class
Run Code Online (Sandbox Code Playgroud)

我试过通过ApplicationRecord :: Email调用电子邮件来更具特定于上下文,但无济于事.

所有SO和其他指南通常都会改变我们的模型名称,但我觉得必须有更好的方法.要清楚我们正在运行Rails 5,所以我想知道是否有一个更新它来解决这个问题,我根本没有找到.

Ste*_*fan 5

include SendGrid 它是罪魁祸首.

它将SendGrid模块中的所有常量添加到当前模块(可能是最高级别),因此您可以使用SendGrid没有前缀的类,例如,Email.new而不是SendGrid::Email.new.

缺点是它也会混淆你现有的常数.

您可以将其包含在特定模块下:

class Notifications::WelcomeWorker
  include Sidekiq::Worker
  include SendGrid

  # ...
end
Run Code Online (Sandbox Code Playgroud)

然后,Email解析Sendgrid::Email::Email解析为您的顶级Email课程.

或者您可以简单地删除该include SendGrid行并使用SendGrid::前缀.