我们一直在嘲笑我们的电子邮件工作,直到我们真正将SendGrid Gem包含在工作人员的顶端
require 'sendgrid-ruby'
include SendGrid
class Notifications::WelcomeWorker
include Sidekiq::Worker
def perform(email_id)
emailAddr = Email.find(email_id)
...
end
end
问题似乎出现了,因为SendGrid在(电子邮件)
中具有相同的模型因此生成消息
undefined method `find' for SendGrid::Email:Class
我尝试通过ApplicationRecord :: Email调用电子邮件,以更具针对性,但无济于事。
所有SO和其他指南通常都会改变我们的模型名称,但我觉得必须有更好的方法。为了清楚起见,我们正在运行Rails 5,所以我想知道是否有一个更新它来解决这个问题,我根本找不到它。
答案 0 :(得分:5)
include SendGrid
它是罪魁祸首。
它将SendGrid
模块中的所有常量添加到当前模块(可能是最高级别),因此您可以使用不带前缀的SendGrid
类,例如仅Email.new
代替SendGrid::Email.new
。
缺点是它也会混淆你现有的常数。
您可以将其包含在特定模块下:
class Notifications::WelcomeWorker
include Sidekiq::Worker
include SendGrid
# ...
end
然后,Email
解析为Sendgrid::Email
,::Email
解析为您的顶级Email
课程。
或者您只需删除include SendGrid
行并使用SendGrid::
前缀。