Tôi đang thêm omniauth vào ứng dụng có đường ray 2.3.11. Tôi về cơ bản theo sau railscast của Ryan Bate (với những sửa đổi thích hợp cho đường ray 2.3). Nhưng tôi thấy điều gì đó rất lạ khi thử nghiệm phần này của mã:find_or_create_by nhiều thuộc tính không tìm thấy bản ghi khi được gọi trong ngữ cảnh của đối tượng thuộc đối tượng (AR lỗi trong 2.3.11?)
class AuthenticationsController < ApplicationController
...
def create
auth = request.env["omniauth.auth"]
current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'], auth['uid'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
end
...
end
Find_or_create luôn tạo. Trong nhật ký, tôi thấy điều này chọn:
SELECT * FROM `authentications` WHERE (`authentications`.`provider` IN ('facebook','XXXXXXX') AND `authentications`.`uid` IS NULL) AND ((`authentications`.`user_id` = 10)) LIMIT 1
Đó không phải là lựa chọn đúng cho phương pháp đó. auth ['provider'] và auth ['uid'] được điền chính xác (và nó tạo bản ghi mới tốt).
Phức tạp hơn: Nếu tôi vào bảng điều khiển và làm Authentication.find_or_create_by_provider_and_uid('facebook', 'XXXXX')
, nó hoạt động tốt (tìm thấy bản ghi hiện có). Nhưng nếu tôi có được một người dùng và làm user.authentications.find_or_create_by_provider_and_uid('facebook', 'XXXXX')
, nó tạo một bản ghi mới và tôi thấy cùng một câu lệnh truy vấn có vấn đề trong nhật ký.
Tôi biết tôi có thể làm việc xung quanh điều này (và Ryan Bates thay đổi mã này sau này), nhưng điều này là rất khó khăn. Tôi có thiếu một cái gì đó hoặc hiện này trông giống như một lỗi trong ActiveRecord?
Điều này không dành riêng cho OmniAuth hoặc Devise. Trước khi gửi bài này, tôi đã thử nó với hai lớp khác (các lớp khá đơn giản). Cùng một kết quả [Klass.find_or_create_by_a_and_b ('A', 'B') hoạt động nhưng parent.klasses.find_or_create_by_a_and_b ('A', 'B') tạo ra một lựa chọn muốn b là null và một ('A', 'B ')].
Bây giờ tôi chắc chắn nghĩ đây là lỗi 2.3.11. Trước khi tôi gửi một lỗi, có ai nhìn thấy bất cứ điều gì tôi đang thiếu? Có ai nhìn thấy vấn đề này không?
Âm thanh như một lỗi. Gửi nó cho dự án đường ray. –