sqlite3 varchar correspondente a "like", mas não "="
sando o Rails 3.1 e o sqlite3 para desenvolvimento, ambientes de test
Adicionou uma nova tabela em uma migração:
create_table :api_keys do |t|
t.string :api_key
t.integer :user_id
t.timestamps
end
Isso produz uma tabela com o seguinte 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
No modelo ActiveRecord:
before_create :fill_api_key
private
def fill_api_key
self.api_key = SecureRandom.hex(30)
end
Método localizador dinâmico da ActiveRecordfind_by_api_key(api_key)
não funciona (retorna nulo). Mesmo com
ApiKey.where({:api_key => 'something'}).first
No sqlite3, faço o seguinte:
insert into api_keys (id, api_key) values (-1, '12345');
Se eu agora executar um select:
select api_keys.* from api_keys where api_keys.api_key = '12345';
o registro será encontrado.
Os dados pré-existentes criados no meu aplicativo são exibidos se eu executar uma seleção não filtrada:
select api_keys.* from api_keys;
Se eu tentar encontrar um registro preexistente colando na minha consulta uma longa sequência hexadecimal de um desses registros preexistentes:
select api_keys.* from api_keys where api_keys.api_key = 'long hex string';
então não retorna resultados. Se eu tentar isso:
select api_keys.* from api_keys where api_keys.api_key like 'long hex string';
Então eu recebo uma partida.
Criei um índice em api_keys.api_key, mas isso não teve efeit
Este problema afeta outro modelo no meu aplicativo que produz uma sequência semelhante de dígitos hexadecimais aleatórios usando Digest :: SHA1 :: hexdiges
Jame