2015-08-07 5 views

ответ

0

Вы можете использовать $in operator, чтобы увидеть, подходит ли какое-либо поле в массиве:

where(:from => { :$in => array }) 

Mongoid заплата операторы MongoDB в Symbol как методы, так что вы могли бы также сказать:

where(:from.in => array) 

Если вы действительно ищете значения, которые содержат любые из значений в массиве, то вы могли бы просто построить одного регулярное выражение, которое делает это с помощью чередования:

re = /#{array.map { |s| Regexp.escape(s.to_s) }.join('|')}/i 
Model.where(:from => re) 

Обратите внимание, что нет передней или задней .* в регулярных выражениях, что и ничего полезного не делает. Также обратите внимание на наличие вызовов Regexp.escape до того, как компоненты будут соединены с оператором чередования регулярных выражений (|).

+0

Привет, может ли регулярное выражение также применяться в операторе '$ in'? – newBike

+0

Вы ищете сопоставление шаблонов, а не строгое равенство? –

+0

да! как вы можете видеть, изначально я совпадаю с этим способом 'from: /.*# {from}. */i,', но я не знал, как его применить в операторе '$ in'. – newBike