Ruby和Datamapper如何检查记录是否存在以及在哪里?

4
我正在使用Sinatra、Datamapper和OAuth进行用户身份验证的基本Ruby应用程序。当我从OAuth服务接收到数据后,我会在sqlite3数据库中保存一个新用户的记录。
我不知道如何验证用户记录是否已经存在于用户数据库表中。我可以使用用户的唯一ID(uid)来交叉检查是否已经存储了该UID,但我不确定应该在哪里执行此操作。
我有2个类和一个/callback路由。User类是数据库模型,而Authentication类具有连接到OAuth的各种方法以及/callback路由,其中将调用Authentication.save方法。
我应该在Authentication.save方法中检查现有记录并返回布尔值或其他内容吗?在Authentication中创建一个新方法,类似于Authentication.exists?(那看起来像什么?)还是应该在/callback路由内进行检查?
如果我的描述不够清晰,我很抱歉,因为我是一个完全的Ruby初学者...
1个回答

2

在创建新用户之前,您应该尝试检查是否存在相同登录名和电子邮件的用户(例如):

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

3
我不确定,但似乎为了检查寄存器的存在而获取整个已填充的对象集合并不是一种优化的解决方案。我将以if User.count(:login=>user.login, :email=>user.email) == 0替换该条件。 - fguillen
User.count更好,我不知道为什么我没有提到它,因为这是我做这种事情的方式。 - Yoann Le Touche
转念一想,user.count不起作用:https://dev59.com/Q23Xa4cB1Zd3GeqPdly3。我也被它咬了一口。 - codeObserver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接