Ruby & Datamapper проверяет, существует ли запись и где? - PullRequest
4 голосов
/ 18 ноября 2009

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

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

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

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

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

1 Ответ

2 голосов
/ 18 ноября 2009

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

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
...