У меня есть модель User
, которая используется для аутентификации с использованием аутентификации. Я настроил его так, чтобы для входа в систему могли использоваться разные провайдеры (например, facebook, учетные записи google). Если письмо уже находится в базе данных при регистрации с использованием этих поставщиков, пользователь подписывается на эту учетную запись.метод first_or_create с ассоциацией embeds_many в mongoid
class User include Mongoid::Document embeds_many :providers field :email,type: String, default: "" end
class Provider include Mongoid::Document field :name, type: String field :uid, type: String embedded_in :user end
И я использую from_omniauth
метод, чтобы найти пользователя на основе информации AUTH.
def from_omniauth(auth) user=User.find_by(email: auth.info.email) return user if user where(:"providers.name" => auth.provider, :"provider.uid" => auth.uid).first_or_create do |user| user.email = auth.info.email user.password = Devise.friendly_token[0,20] end end
Но я получаю сообщение об ошибке, когда он не может найти пользователь и пытается создать.
Но почему он рассматривает это как генерацию динамического поля, поскольку я уже определил ассоциации. Я пробовал find_or_initialize
способ тоже но такой же ошибка.
Может кто-нибудь помочь мне понять это. Заранее спасибо.