2016-07-12 2 views
0

Я пытаюсь захватить все записи в моей таблице, которые имеют определенное значение в одном столбце, но мой запрос возвращает результаты с нулевым значением в этом столбце.Active Record .where находит результаты, которые не соответствуют требованиям.

Merit::ActivityLog.where(:related_change_type== 'Merit::BadgesSash') 

возвращает запись

#<Merit::ActivityLog id: 60, action_id: 102, related_change_type: nil, related_change_id: nil, description: "description text", created_at: "2016-07-12 19:58:05"> 
+1

Ваш код не работает из-за сравнения символа с строкой: ': related_change_type == 'Merit :: BadgesSash'', который вернет ложь. По существу, результаты запроса: «Merit :: ActivityLog.where (false)», который возвращает все записи в db. См. Мой ответ ниже – oreoluwa

ответ

2

Я думаю, что ваш запрос должен быть:

Merit::ActivityLog.where(related_change_type: 'Merit::BadgesSash') 
0

попробовать Merit::ActivityLog.where(related_change_type: 'Merit::BadgesSash'). Если это не работает, обходным решением будет Merit::ActivityLog.where(related_change_type: 'Merit::BadgesSash').reject{|l| l.related_change_type.nil?}, но не рекомендуется ...

+0

Код OP не работает из-за сравнения символа с строкой: ': related_change_type == 'Merit :: BadgesSash'', который вернет false. и 'Merit :: ActivityLog.where (false)' возвращает все записи в db – oreoluwa

+0

@oreoluwa nice! Спасибо за объяснение. Не знал. Where (false) возвращает все записи –

Смежные вопросы