2013-01-16 2 views
0

ici mon code dans le modèle estdouble recherche cas mongodb dans Ruby on Rails

def self.search(search) 
    if search 
    where(name: /#{Regexp.escape(search)}/i) 
    else 
     scoped 
    end 
    end 

Maintenant, je veux ajouter un autre champ aussi à la recherche comme

where(price: /#{Regexp.escape(search)}/i) 

Donc, ma requête doit rechercher deux champ comme

where(name: /#{Regexp.escape(search)}/i) (or) where(price: /#{Regexp.escape(search)}/i) 

Comment ajouter ce champ dans deux ou MongoDB comme . L'exemple de travail est accepté. Depuis que j'ai moins de connaissances sur mongodb.

Répondre

1

Si vous utilisez MongoId 3, vous pouvez écrire votre requête comme ceci:

self.or({name: /#{Regexp.escape(search)}/i}, {price: /#{Regexp.escape(search)}/i}) 

Si vous utilisez autre chose que MongoId 3 (comme MongoMapper ou MongoId 2) , veuillez donner le nom et le numéro de version.

Source: Les documents de syntaxe de sélection pour Mongoid 3 sont here.

+0

merci pour votre aide .. Cela fonctionne – regmiprem

0

Essayez cette
where('$or' => [{"name" => "/#{Regexp.escape(search)}/i"}, {"price" => "/#{Regexp.escape(search)}/i"}])

+0

ne sais pas pourquoi mais ça ne marche pas pour moi – regmiprem

+2

Ce billet est automatiquement signalé comme de mauvaise qualité car il est trop court. Pourriez-vous l'agrandir en ajoutant du texte pour expliquer comment il résout le problème? – gung