То, что у вас не получится.
@items = Item.where context: nil || ''
действительно оценивается как:
@items = Item.where context: ''
Таким образом, вы не найдете элементы с context
, установленными на nil
, используяэтот метод.
Примечание
Использование thing || other
таким способом никогда не работает.Вы не можете написать if item == 'test' || 'something'
и ожидать, что это сработает в тех случаях, когда item
равно 'something'
.Это будет работать только в тех случаях, когда item
равно 'test'
.Чтобы заставить что-то подобное работать, вам нужно написать if item == 'test' || item == 'something'
.Это не то, как люди говорят, а то, как компьютеры читают.
Назад к основному событию
Один из способов написать запрос, который будет работать, это:
Item.where("context = ? or context = ?", nil, '')
Это читается как: найти все предметы, где context
равно nil
или context
равно ''
.
Хотя это работает, это не считается особенно "Rails-y».Лучшим способом было бы:
Item.where(context: [nil, ''])
Это читается как: найти все предметы, где context
находится в [nil, '']
.
Смежный вопрос