Rails,Cequel - 不知道如何投射到UUID

时间:2015-03-07 22:43:53

标签: ruby-on-rails devise cequel

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


HomeController #index 中的

ArgumentError

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

如何纠正?

1 个答案:

答案 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

这意味着它会假设nilTimeDateTime等值。在它们中没有一个会使用Type :: Timeuuid的方法cast,它位于somewhere here

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

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