Ответ 1
Существует 5 вариантов, которые можно было бы рассматривать как реализации "Обозначения хэша" (последние два имеют вид хэш-иш):
-
С Ruby on Rails 5 вы можете выполнить следующую цепочку с помощью метода
ActiveRecord::Relation#or
:Person.where(name: 'Neil').or(Person.where(age: 27))
-
Используйте
where_values
вместе сreduce
.unscoped
необходим только для Rails 4.1+ для обеспеченияdefault_scope
не включен вwhere_values
. В противном случае предикаты изdefault_scope
иwhere
будут связаны цепью с операторомor
:Person.where( Person.unscoped.where(name: ['Neil'], age: [27]).where_values.reduce(:or) )
-
Установите сторонние плагины, реализующие эти или подобные функции, например:
-
Где или (обратная сторона упомянутой выше функции Ruby on Rails 5
.or
) -
Person.where{(name == 'Neil') | (age == 27)}
-
Person.where(name: 'Neil').or(age: 27)
-
Person.where.anyof(name: 'Neil', age: 27)
-
Person.where( (SmartTuple.new(' or ') << {name: 'Neil', age: 27}).compile )
-
-
Используйте Arel:
Person.where( Person.arel_table[:name].eq('Neil').or( Person.arel_table[:age].eq(27) ) )
-
Используйте подготовленные инструкции с именованными параметрами:
Person.where('name = :name or age = :age', name: 'Neil', age: 27)