2009-11-18 2 views
4

저는 Sinatra, Datamapper를 사용하여 구축하고있는 기본 Ruby 앱을 보유하고 있으며 OAuth를 사용하여 사용자 인증을 받았습니다. Oauth 서비스에서 데이터를 다시 받으면 sqlite3 db에 새 사용자의 레코드를 저장합니다.Ruby & Datamapper는 레코드가 존재하는지 확인하고 어디에서?

어떻게 해야할지 모르겠지만 사용자 레코드를 확인하는 방법은 사용자 데이터베이스 테이블에 아직없는 것입니다. 사용자의 고유 ID (uid)를 사용하여 uid가 이미 저장되어 있는지 여부를 확인할 수 있지만이 작업을 수행 할 위치는 확실하지 않습니다.

나는 2 개의 클래스와 /콜백 경로를 가지고 있습니다. 사용자 클래스는 DB의 모델 및 인증 클래스는 OAuth를 연결하기위한 방법을 모듬 한과 Authentication.save 메소드가 호출되고있는 것이다 /콜백 경로.

Authentication.save 메서드 내에서 기존 레코드를 확인하고 부울 또는 다른 것을 반환해야합니까? 인증에 새 메소드를 작성하면 Authentication.exists와 유사할까요? (그리고 그 모양은 어떻게됩니까?) 아니면 /콜백 경로를 확인해야합니까? 이것이 내가 내 문제를 설명하는 힘든 시간을 보내고과 절대 루비 초보자 생각하고, 100 % 분명 아니었다면 나는 사과

...

답변

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

확실하지 않지만 잠재적으로 등록 된 개체의 전체 채워진 컬렉션을 가져 와서 등록을 확인하는 것은 아닙니다 (예 :). 최적화 된 솔루션. 조건을'if User.count (: login => user.login, : email => user.email) == 0'으로 바꿀 것입니다. – fguillen

+0

User.count가 더 낫다. 나는 항상 그런 종류의 일을하는 방식이기 때문에 왜 언급하지 않았는 지 모른다. –

+1

이를 반영하기 위해 답변을 업데이트해야 할 수도 있습니다. – codeObserver