所以我厌倦了这个,因为出于某种原因,这个bug似乎已经存在了这么多个月,它显然不会困扰很多人。我无法理解为什么,因为我永远无法创建基本的用户身份验证系统。
我得到的错误是:
@selector={"_id"=>{"$oid"=>BSON::ObjectId('5527d409536962695c000000')}}
Can't canonicalize query: BadValue unknown operator: $oid
这是因为我尝试创建一个名为current_user的辅助方法。我使用以下代码:
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
如何解决这个疯狂烦人的错误?
答案 0 :(得分:1)
这是由ObjectId的JSON表示引起的。这是我的团队和我一直在使用的解决方案。
将此添加到Concer / zero_oid_fix.rb
module ZeroOidFix
extend ActiveSupport::Concern
module ClassMethods
def serialize_from_session(key, salt)
record = to_adapter.get((key[0]["$oid"] rescue nil))
record if record && record.authenticatable_salt == salt
end
end
end
然后在User.rb中添加
include ZeroOidFix
确保该线位于设计线下方(如果您正在使用它)。