私はdeviseとomni-authを使ってlinkedinでログインしています。
Railscast に記載されているように、ユーザー モデルに from_omniauth メソッドを追加しました。
これはコードです:
#Create a new user if does not exist
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_create! do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email
end
end
Started GET "/users/auth/linkedin/callback?oauth_token=XXX"
INFO -- omniauth: (linkedin) Callback phase initiated.
Processing by OmniauthCallbacksController#linkedin as HTML
(0.4ms) BEGIN
User Exists (0.6ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = 'email@yahoo.com' LIMIT 1
SQL (3.6ms) INSERT INTO "users" ("created_at", "email", "provider", "uid", "updated_at") VALUES ('2013-11-12 06:50:57.811205', 'email@yahoo.com', 'linkedin', 'XXXX', '2013-11-12 06:50:57.811205') RETURNING "id" *[["created_at", Tue, 12 Nov 2013 06:50:57 UTC +00:00], ["email", "email@yahoo.com"], ["provider", "linkedin"], ["uid", "XXXX"], ["updated_at", Tue, 12 Nov 2013 06:50:57 UTC +00:00]]*
**PG::ProtocolViolation: ERROR: bind message supplies 5 parameters, but prepared statement "a1" requires 0**
: INSERT INTO "users" ("created_at", "email", "provider", "uid", "updated_at") VALUES ('2013-11-12 06:50:57.811205', 'XXXX@yahoo.com', 'linkedin', 'ts2xg5e6d9', '2013-11-12 06:50:57.811205') RETURNING "id"
(0.3ms) ROLLBACK
Completed 500 Internal Server Error in 117ms
PG::ProtocolViolation - ERROR: bind message supplies 5 parameters, but prepared statement "a1" requires 0
正しいクエリが生成されない理由を理解するのに苦労しています。挿入ステートメントをコピーして実行すると、レコードがデータベースに正常に挿入されます。ただし、上記のクエリで Id .. を返した後、これらの追加のパラメーターを生成します。
これを解決する方法はありますか?
ありがとう