2009-11-18 70 views
4

我有一个基本的Ruby应用程序,与Sinatra,Datamapper一起构建,并使用OAuth进行用户身份验证。当我从Oauth服务接收到数据时,我将一个新用户的记录保存在sqlite3数据库中。Ruby&Datamapper检查记录是否存在,以及在哪里?

我不知道该怎么做是如何去验证用户记录不存在于用户数据库表上。我可以使用用户的唯一ID(uid)来检查是否已经存储了uid,但我只是不确定在哪里执行此操作。

我有2类和/回调路线。类是db模型,并且类具有用于连接到将调用Authentication.save方法的OAuth和/回调路径的各种方法。

我应该检查Authentication.save方法中的现有记录并返回布尔值或其他内容吗?在身份验证创建一个新的方法,就像Authentication.exists? (和那看起来像什么?)或者我应该检查/回调路线?

我道歉,如果这是不是100%清楚,我有困难的时候,描述我的问题,是一个绝对的Ruby初学者...

回答

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

我不知道,但它看起来像潜在的,取对象的整体完全填充集合,以检查是否存在的寄存器不是一个优化解决方案我会用'如果User.count(:login => user.login,:email => user.email)== 0'替换条件。 – fguillen 2011-11-02 14:31:17

+0

User.count更好,我不知道为什么我没有提到它,因为它是我总是这样做的方式。 – 2011-11-14 12:52:40

+1

也许你应该更新答案来反映这一点。 – codeObserver 2013-06-16 23:02:32

相关问题