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

标签 ruby oauth sinatra datamapper

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

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

我有 2 个类和一个 /callback 路由。 User 类是数据库模型,Authentication 类有各种方法连接到 OAuth,/callback 路由将有正在调用的 Authentication.save 方法。

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

如果这不是 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

关于Ruby & Datamapper 检查记录是否存在,以及在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1752936/

相关文章:

ruby - 元编程 sinatra get

api - 仍然可以通过 API key 使用 Google 日历 API 吗?

oauth-2.0 - Keycloak Google 身份提供商错误 : "Identity token does not contain hosted domain parameter"

ruby - Sinatra 中的缓存变量

ruby - 使用 compass 和 zurb-foundation 的问题

mysql - 使用 Ruby/Rails 基于信息架构生成 MySQL View

ruby-on-rails - 过度提交 RailsS​​chemaUpToDate 在 --run 时通过但在提交时失败

node.js - 在 Node 中使用 Passport 中间件进行 Twitter 身份验证

ruby - 从 Heroku 应用程序中访问当前的 git 提交号

ruby - 使用 sinatra 和 datamapper 进行延迟注册