【问题标题】:Ruby & Datamapper checking if a record exists, and where?Ruby & Datamapper 检查记录是否存在,在哪里?
【发布时间】:2010-12-17 16:46:21
【问题描述】:

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

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

我有 2 个课程和一个 /callback 路线。 User 类是 db 模型,Authentication 类具有连接到 OAuth 的各种方法,以及将具有的 /callback 路由正在调用的 Authentication.save 方法。

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

如果这不是 100% 清楚,我深表歉意,我很难描述我的问题,而且我是一个绝对的 Ruby 初学者...

【问题讨论】:

    标签: ruby oauth sinatra datamapper


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我不确定,但它看起来可能会获取一个完整的对象集合来检查寄存器是否存在,这不是一个优化的解决方案。我将用if User.count(:login=>user.login, :email=>user.email) == 0 替换条件。
    • User.count 更好,我不知道为什么我没有提到它,因为这是我一直做这类事情的方式。
    • 再想一想,user.count 不起作用:stackoverflow.com/questions/14393004/…。我也被它咬了
    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 2011-02-20
    • 2021-06-01
    • 2015-01-21
    • 2012-08-13
    • 2015-01-02
    相关资源
    最近更新 更多