Ruby & Datamapper проверяет, существует ли запись и где?

StackOverflow https://stackoverflow.com/questions/1752936

Вопрос

У меня есть базовое приложение Ruby, которое я создаю с помощью Sinatra, Datamapper и имеет аутентификацию пользователя с использованием OAuth.Когда я получаю данные обратно от службы Oauth, я сохраняю запись о новом пользователе в базе данных sqlite3.

Чего я не знаю, как сделать, так это как проверить, что пользовательская запись еще не существует в таблице базы данных пользователя.Я могу использовать уникальный идентификатор пользователя (uid) для перекрестной проверки, сохранен ли uid уже, но я просто не уверен, где это сделать.

У меня есть 2 класса и /обратный вызов маршрут.В Пользователь класс - это модель БД, а Аутентификация класс имеет различные методы для подключения к OAuth, и /обратный вызов маршрут, который будет иметь аутентификацию.вызываемый метод сохранения.

Должен ли я проверять наличие существующей записи в Аутентификация.сохранить метод и возвращает логическое значение или что-то еще?Создайте новый метод в Аутентификация это было бы похоже на аутентификацию.существует?(и как бы это выглядело?) Или я должен проверять в /обратный вызов маршрут?

Я прошу прощения, если это было не на 100% ясно, мне трудно описать свою проблему, и я абсолютный новичок в Ruby...

Это было полезно?

Решение

Непосредственно перед созданием нового пользователя вы должны попытаться проверить, существует ли пользователь с таким же логином и электронной почтой (например) :

require 'dm-aggregates'

user=User.new
user.login=your_login_data_returned_by_oauth
user.email=your_email_data_returned_by_oauth
# And so on...
user.save if User.count(:login=>user.login, :email=>user.email) == 0
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top