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

questionAnswers(2)

yourAnswerToTheQuestion