Я только что добавил Sendgrid в свое приложение, используя
gem 'sendgrid-ruby'
Поэтому у меня начинаются проблемы с загрузкой класса. Проблема в том, что у меня уже есть модель с именем client.rb.
class Client < ApplicationRecord
belongs_to :user
Таким образом, иногда CanCanCan или другие методы переопределяются клиентским классом Sendgrid. Например здесь:
if user.talent.present?
# Talents can only read his own booking model
can [:read, :accept, :check_in, :update], Booking, { talent: { user_id: user.id } }
# Talents can only see his own connections
can :read, Connection, Connection.where('user_1_id = :id or user_2_id = :id', id: user.id) do |connection|
(connection.user_1_id == user.id) || (connection.user_2_id == user.id)
end
can :create, Photo
# can :read, Photo, user_id: user.id
can :update, Photo, user_id: user.id
can :delete, Photo, user_id: user.id
elsif user.client.present?
can :create, Booking
can [:read, :update], Booking, user_id: user.id
#can :update, Booking, { talent: { user_id: user.id } }
# Should we able to delete Bookings? or those created bookings get archive?
# TODO: Really?
# can :read, Agency
# can :update, Client, user_id: user.id
В этом методе user.client.present? ломает приложение, потому что CanCanCan считает, что Client является экземпляром Sendgrid::Client, а не моей собственной моделью
Как я могу заставить свое приложение все время знать, что «клиент» должен быть моим собственным классом, а не классом Sendgrid?
Единственные точки, которые я импортирую sendgrid, находятся на моих почтовых программах:
require 'sendgrid-ruby'
include SendGrid
class AdminMailer < ApplicationMailer
include SendGrid
Да, вот в чем твоя проблема. Не делай этого.
В вашу защиту, эта строка делает существует в Фрагменты быстрого запуска SendGrid, но я не уверен, для чего. Выглядит неиспользованным. Каждое использование классов sendgrid ограничено пространством имен. Так что да, просто удалите его, и все будет хорошо.
Взгляните и на это: https://sendgrid.com/docs/for-developers/sending-email/rubyonrails/
TROUBLESHOOTING.md
упоминает об этом sendgrid-ruby, но я не понимаю, почему они вообще советуютinclude SendGrid
.