2009-11-18 73 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

相關問題