sqlite3 varchar que coincide con "me gusta" pero no "="
Utilizando Rails 3.1 y sqlite3 para entornos de desarrollo y prueba.
Se agregó una nueva tabla en una migración:
create_table :api_keys do |t|
t.string :api_key
t.integer :user_id
t.timestamps
end
Esto produce una tabla con el siguiente esquema:
create_table "api_keys", :force => true do |t|
t.string "api_key"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
En el modelo ActiveRecord:
before_create :fill_api_key
private
def fill_api_key
self.api_key = SecureRandom.hex(30)
end
Método de buscador dinámico de ActiveRecordfind_by_api_key(api_key)
no funciona (devuelve nulo). Lo mismo con
ApiKey.where({:api_key => 'something'}).first
En sqlite3, hago lo siguiente:
insert into api_keys (id, api_key) values (-1, '12345');
Si ahora ejecuto una selección:
select api_keys.* from api_keys where api_keys.api_key = '12345';
se encontrará el registro.
Los datos preexistentes creados desde mi aplicación se muestran si ejecuto una selección sin filtrar:
select api_keys.* from api_keys;
Si trato de encontrar un registro preexistente pegando en mi consulta una larga cadena hexadecimal de uno de esos registros preexistentes:
select api_keys.* from api_keys where api_keys.api_key = 'long hex string';
then no devuelve resultados. Si intento esto en su lugar:
select api_keys.* from api_keys where api_keys.api_key like 'long hex string';
Entonces obtengo un partido.
He creado un índice en api_keys.api_key pero eso no tuvo ningún efecto.
Este problema afecta a otro modelo en mi aplicación que produce una cadena similar de dígitos hexadecimales aleatorios usando Digest :: SHA1 :: hexdigest en su lugar.
Jame