Ruby& Datamapper检查记录是否存在,以及在哪里?

时间:2009-11-18 00:54:20

标签: ruby oauth sinatra datamapper

我有一个基本的Ruby应用程序,我正在使用Sinatra,Datamapper构建并使用OAuth进行用户身份验证。当我从Oauth服务收到数据时,我在sqlite3数据库中保存了一个新用户的记录。

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

我有2个课程和 / callback 路线。 用户类是数据库模型,身份验证类有各种连接到OAuth的方法,以及 / callback 路由正在调用Authentication.save方法。

我应该检查 Authentication.save 方法中的现有记录并返回布尔值或其他内容吗?在身份验证中创建一个类似Authentication.exists的新方法? (那会是什么样子?)或者我应该在 / callback 路线中查看?

如果这不是100%明确,我很难道歉,我很难描述我的问题并且是一个绝对的Ruby初学者......

1 个答案:

答案 0 :(得分: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