Rails 型号名称与包含的 gem 冲突
Rails Model name conflict with included gem
我们一直在成功地模拟我们的电子邮件作业,直到我们真正将我们的 SendGrid Gem 包含在我们的 worker
顶部
require 'sendgrid-ruby'
include SendGrid
class Notifications::WelcomeWorker
include Sidekiq::Worker
def perform(email_id)
emailAddr = Email.find(email_id)
...
end
end
问题的出现似乎是因为 SendGrid 在 (Email) 中具有相同的模型
从而生成消息
undefined method `find' for SendGrid::Email:Class
我试过通过 ApplicationRecord::Email 调用电子邮件以更具体地说明情况,但无济于事。
所有 SO 和其他指南通常都会更改我们的模型名称,但我觉得必须有更好的方法。需要明确的是,我们是 运行 Rails 5,所以我想知道是否有更新来解决我根本没有发现的这个问题。
include SendGrid
罪魁祸首。
它将SendGrid
模块中的所有常量添加到当前模块(可能是顶层),因此您可以使用SendGrid
的classes而无需前缀,例如只是 Email.new
而不是 SendGrid::Email.new
.
缺点是它还会扰乱您现有的常量。
您可以将其包含在特定模块下:
class Notifications::WelcomeWorker
include Sidekiq::Worker
include SendGrid
# ...
end
然后,Email
解析为 Sendgrid::Email
,::Email
解析为您的顶级 Email
class.
或者您可以简单地删除 include SendGrid
行并使用 SendGrid::
前缀。
我们一直在成功地模拟我们的电子邮件作业,直到我们真正将我们的 SendGrid Gem 包含在我们的 worker
顶部require 'sendgrid-ruby'
include SendGrid
class Notifications::WelcomeWorker
include Sidekiq::Worker
def perform(email_id)
emailAddr = Email.find(email_id)
...
end
end
问题的出现似乎是因为 SendGrid 在 (Email) 中具有相同的模型
从而生成消息
undefined method `find' for SendGrid::Email:Class
我试过通过 ApplicationRecord::Email 调用电子邮件以更具体地说明情况,但无济于事。
所有 SO 和其他指南通常都会更改我们的模型名称,但我觉得必须有更好的方法。需要明确的是,我们是 运行 Rails 5,所以我想知道是否有更新来解决我根本没有发现的这个问题。
include SendGrid
罪魁祸首。
它将SendGrid
模块中的所有常量添加到当前模块(可能是顶层),因此您可以使用SendGrid
的classes而无需前缀,例如只是 Email.new
而不是 SendGrid::Email.new
.
缺点是它还会扰乱您现有的常量。
您可以将其包含在特定模块下:
class Notifications::WelcomeWorker
include Sidekiq::Worker
include SendGrid
# ...
end
然后,Email
解析为 Sendgrid::Email
,::Email
解析为您的顶级 Email
class.
或者您可以简单地删除 include SendGrid
行并使用 SendGrid::
前缀。