我正在尝试使用sendgrid-ruby
API发送电子邮件。我有一个Attachment
模型,用于跟踪AWS桶中的上传文件。
我刚刚尝试在设置
后运行bundle installgem 'sendgrid-ruby'
在我的Gemfile中,但是在安装gem之后加载应用程序时,我收到以下错误:
TypeError (superclass mismatch for class Attachment):
app/models/attachment.rb:1:in `<top (required)>'
app/controllers/jobs_controller.rb:182:in `edit'
无论如何都可以在不更改模型名称的情况下解决此问题吗?
更新:
我的SendGridEmail类:
require 'sendgrid-ruby'
include SendGrid
class SendGridEmail
def initialize
end
def send_message
mail = Mail.new
mail.from = Email.new(email: 'test@example.com')
mail.subject = 'I\'m replacing the subject tag'
personalization = Personalization.new
personalization.add_to(Email.new(email: 'cannon.moyer@treadmilldoctor.com'))
personalization.add_substitution(Substitution.new(key: '-name-', value: 'Example User'))
personalization.add_substitution(Substitution.new(key: '-city-', value: 'Denver'))
mail.add_personalization(personalization)
mail.add_content(Content.new(type: 'text/html', value: 'I\'m replacing the <strong>body tag</strong>'))
mail.template_id = '7fd8c267-9a3c-4093-8989-3df163e87c47'
sg = SendGrid::API.new(api_key: "xxxxxxxxxxxxxxxxxxxxxx")
begin
response = sg.client.mail._("send").post(request_body: mail.to_json)
rescue Exception => e
puts e.message
end
puts response.status_code
puts response.body
puts response.headers
end
def create_notification
@customer.notifications.create(name: "Manually Text Job to Customer", to: "+1", notification_type: "Manual Job Notification")
end
end
答案 0 :(得分:2)
使用include
会混淆名称空间,所以最好不要这样做。 Ruby不像Python和Node那样具有单一的全局命名空间,因此在导入时需要非常小心。
如果你include SendGrid
并且有一个SendGrid::Attachment
类,那么Ruby会尝试稍后与你的Attachment
类进行协调,这将失败。
最好的计划是更新代码,在所有内容中包含SendGrid::
前缀。一个设计良好的库将被完全命名,以避免这个问题。