Ruby on rails Rails模型名称与包含的gem冲突
我们一直在成功地模拟我们的电子邮件工作,直到我们真正将SendGrid Gem放在工作人员的顶部Ruby on rails Rails模型名称与包含的gem冲突,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,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 出现问题的原因似乎是SendGr
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,所以我想知道它是否有一个更新来解决这个问题,而我只是没有发现。
包括SendGrid
它就是罪魁祸首
它将SendGrid
模块中的所有常量添加到当前模块(可能是顶层),因此您可以使用SendGrid
的类而不带前缀,例如,只使用Email.new
而不是SendGrid::Email.new
缺点是它也会弄乱现有的常量
您可以将其包含在特定模块下:
class Notifications::WelcomeWorker
include Sidekiq::Worker
include SendGrid
# ...
end
然后,Email
解析为Sendgrid::Email
和::Email
解析为您的顶级Email
类
或者您可以简单地删除
包含SendGrid
行,并使用SendGrid::
前缀。您真的必须包含SendGrid
?这似乎很有侵略性。嗯,我想我们可以选择建立自己的图书馆,而不是使用他们的。从开发的角度来看,利用他们的创业板更快,这取决于他们的选择,让我们的模型名称不同。我确实需要向SendGrid gem维护人员提交一个单独的问题。这不是我的意思:-)换句话说:如果删除include SendGrid
行会发生什么?叮叮叮当。作为答案提交,以便我可以接受。您为我节省了无数个小时的工作。为了让其他人明白,我们选择删除include SendGRid并使用SendGRid前缀,因为这在人们查看代码时会更加明确。