我遵循本教程(https://medium.com/@olance/rails-4-user-authentication-with-cequel-and-devise-86e1c9ccbcd0),但我遇到了登录问题。当我收到以下错误时:
不知道如何将{" n" => 242893962554067921677178635377202198460}投射到UUID
提取的来源(第#423行):
Cql::Uuid.new(value)
else
fail ArgumentError,
"Don't know how to cast #{value.inspect} to a UUID" # Line 423
end
end
设计使用的模型是:
class User
include Cequel::Record
devise :database_authenticatable, :registerable
key :id, :uuid, auto => true
column :username, :varchar, :index => true
column :name, :varchar
column :lastname, :varchar
column :email, :varchar, :index => true
column :encrypted_password, :varchar
timestamps
end
如果我将密钥更改为varchar,则可以使用UUID,以便用户可以更改电子邮件或其用户名。
如何纠正?
答案 0 :(得分:0)
如果您查看方法来源uuid
,您会看到here:
def uuid(value = nil)
if value.nil?
timeuuid_generator.now
elsif value.is_a?(Time)
timeuuid_generator.at(value)
elsif value.is_a?(DateTime)
timeuuid_generator.at(Time.at(value.to_f))
else
Type::Timeuuid.instance.cast(value)
end
end
这意味着它会假设nil
,Time
,DateTime
等值。在它们中没有一个会使用Type :: Timeuuid的方法cast
,它位于somewhere here
任何cast
方法定义似乎都没有等待接收hash
作为解决方法,您可以尝试类似Cql::Uuid.new(value['n'])
的内容
但你应该看看为什么你在那里得到一个哈希,它应该是什么