Activerecord не может найти модель по атрибуту, даже если запрос правильный - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть модель с именем Invitation, которая имеет атрибут с именем code.Цель приложения - найти правильное приглашение с кодом, который введен где-то.

Однако моя проблема в том, что даже при правильном вводе ActiveRecord не может найти никаких результатов при запросе вбаза данных.Я создал этот небольшой тест, чтобы проиллюстрировать проблему:

ruby-1.9.2-p290 :003 > code = Invitation.first.code
Invitation Load (0.4ms)  SELECT "invitations".* FROM "invitations" LIMIT 1
=> "86f50776bf" 

Итак, на данный момент я загрузил код этого приглашения в переменную

ruby-1.9.2-p290 :004 > i = Invitation.where(:code => code)
Invitation Load (0.2ms)  SELECT "invitations".* FROM "invitations" WHERE "invitations"."code" = '86f50776bf'
=> [] 

И ответ на запросэто пустой массив, хотя код поступает прямо из базы данных.При использовании code == Invitation.first.code, чтобы увидеть, равны ли значения, возвращается true.Я уже проверил оба типа данных Ruby и базы данных, все они являются строками.

Что может вызвать это?и как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 24 сентября 2011

Я нашел решение, когда наткнулся на этот ответ :

В Ruby 1.9 все строки теперь закодированы.По умолчанию все строки должны иметь формат UTF-8, однако SecureRandom.hex (30) возвращает кодировку ASCII-8BIT.

Добавление .force_encoding('UTF-8') к ключу при его выполнении решает проблему:)

1 голос
/ 21 сентября 2011

Исходя из вашего комментария, это может быть случай, когда столбец не VARCHAR, а CHAR, или он содержит конечные пробелы, которые обрезаются слоем ActiveRecord ORM или драйвером базы данных.'foo' и 'foo ' не эквивалентны, но их достаточно LIKE для соответствия.

Возможно, вы захотите переключить этот столбец на переменную длину или настроить свой запрос для проверки: RTRIM(code)=?

0 голосов
/ 21 сентября 2011

@ Марко,

Как вы объявляете переменную кода?Как строка?

Пример:

code = "86f50776bf"

или

code = '86f50776bf'

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...