Rails, Cequel - не знаю, как привести к UUID

Я следую этому руководству ( https://medium.com/@olance/rails-4-user-authentication-with-cequel-and-devise-86e1c9ccbcd0), но у меня проблемы с входом в систему. Когда я получаю следующую ошибку:


ArgumentError в 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

Модель, используемая devise:

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 ответ

Если вы посмотрите в источнике метода 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 типа::Timeuuid, который находится где-то здесь

Любой из cast Кажется, определения методов не ожидают получения hash

В качестве обходного пути вы можете попробовать что-то вроде Cql::Uuid.new(value['n'])Но вы должны проверить, почему вы получили хэш, и что это должно быть на самом деле

Другие вопросы по тегам