0

新しい人が登録するときに使用するメールアドレスが既存のレコードと重複していないかどうかを確認したい。

コードは次のとおりです。

post '/signup' do
    email_address = params['email_address']
    username = params['username']
    password = params['password']
    @duplicate = DB[:users].select(:email_address).where('email_address = ?', email_address)
    if email_address = @duplicate
        redirect "/?msg=Email address already in use. Try again"
        return
    end
end

これにより、電子メール アドレスが重複していない場合でもすべての試行がブロックされ、エラー メッセージが表示されてリダイレクトされます。

(@ マークなしで) で置き換える@duplicateと、同じ結果になり、すべての試行がブロックされます。代わりduplicateに使用すると、重複する電子メール アドレスは無視され、試行はブロックされません。 ===

私はクエリを知っています:

DB[:users].select(:email_address).where('email_address = ?', email_address)

私はそれをテストしたので正しいです。したがって、問題は if 節の構造にあると思います。

4

2 に答える 2

1

クエリの最後に .first を追加する必要があります。そうしないと、配列が取得されます。

その後、 @duplicate != nil かどうかをテストできます

于 2013-05-13T10:33:46.033 に答える