Rails find возвращает nil, даже если есть записи, которые должны быть возвращены - PullRequest
2 голосов
/ 18 января 2012

Я работаю над проектом RoR (RoR 3.1 и Ruby 1.9.2p290), где я столкнулся с серьезной странной проблемой с запросами, не находящими вещи, даже если я знаю, что материал должен быть найден .

Для простоты, скажем, есть модель Car с атрибутом color. У меня есть несколько записей в БД, все с черным цветом. Получение всех записей и их отображение в виде работает нормально, и я не вижу ничего странного.

@cars = Car.all

Вот из консоли, где я получаю первую машину и проверяю, равен ли цвет черному:

ruby-1.9.2-p290 :022 > Car.first.color == "Black"
  Car Load (0.2ms)  SELECT "cars".* FROM "cars" LIMIT 1
 => true 

Это прекрасно работает, как вы можете видеть. Теперь, если я попытаюсь выполнить запрос с find_by_color, он вернет nil! Этого не должно быть.

ruby-1.9.2-p290 :021 > Car.find_by_color("Black")
  Car Load (0.3ms)  SELECT "cars".* FROM "cars" WHERE "cars"."color" = 'Black' LIMIT 1
 => nil 

То же самое относится к любому типу запроса, где я проверяю цвет, например

find(:all, :conditions => { :color => "Black" })

Я перепробовал все, что мог придумать, чтобы попробовать, но сейчас я понятия не имею, что может вызвать что-то подобное.

Есть идеи, что это может быть или с чего начать?

Я благодарен за любую помощь в решении этой проблемы, прежде чем я сойду с ума;)

EDIT

Цвета взяты из файла CSV, который я импортировал через загрузку файла и анализ его в записях автомобилей. Может ли быть что-то с кодировкой или что-то подобное? Также я использую SQLite в разработке на случай, если это поможет.

UPDATE

Я попробовал другой запрос, который работает !!

Car.where('color like ?', "Black")

Возвращает все записи. Очень странно. В чем может быть разница между этими запросами?

Ответы [ 2 ]

1 голос
/ 18 января 2012

Проблема была в кодировании, и когда я добавил

value.encode('utf-8')

в каждое поле для импортированного файла CSV я получил правильные значения в базе данных.

Кажется, проблема кодирования влияет на запросы по-разному.

0 голосов
/ 19 января 2012

Возможно, в конце вашего цветового поля есть странный непечатаемый символ, вы должны обновить поле непосредственно в базе данных, очистив лишние символы.

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