1

我正在关注本教程(https://medium.com/@olance/rails-4-user-authentication-with-cequel-and-devise-86e1c9ccbcd0),但我在登录时遇到问题。当我收到以下错误时:


HomeController 中的参数错误#index

不知道如何将 {"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,以便用户可以更改电子邮件或其用户名。

如何纠正?

4

1 回答 1

0

如果您查看方法的来源,uuid您将在这里看到:

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。在它们中,它都不会使用cast位于此处某处的 Type::Timeuuid 方法

任何cast方法定义似乎都没有等待接收hash

作为一种解决方法,您可以尝试类似Cql::Uuid.new(value['n']) 但您应该检查为什么在那里得到哈希,以及它应该是什么

于 2015-03-07T22:52:45.907 回答