2011-03-21 5 views
0

Disons que nous avons des modèles en tant que tels:RAILS: une recherche complexe Condition

Trigger belongs_to: Position

Position has_many: déclencheur

Position a quelques champs dont: posx,: poxy, et peut-être quelques autres champs que nous aimerions filtrer par ...

Essentiellement. Dans le triggers_controller, je voudrais trouver tous les déclencheurs qui tombent dans une gamme de posx et posy. Je l'ai fait dans une requête dans cakephp, donc je sais que cela devrait être possible, mais je ne sais pas comment structurer cela dans les rails. En outre, je ne sais pas comment faire "et" et "ou" etc ...

Merci!

Répondre

2

Je voudrais créer un champ pour gérer ce genre de recherche potentiellement commune:

class Trigger < ActiveRecord::Base 

    belongs_to :position 

    # if you're in rails 2 
    named_scope :within, lambda{|tlx, tly, brx, bry| {:joins => :position, conditions => ['`positions`.posx >= ? AND `positions`.posy >= ? AND `positions`.posx <= ? AND `positions`.posy <= ?', tlx, tly, brx, bry]} } 

    # if you're in rails 3 
    scope :within, lamba{|tlx,tly,brx,bry| joins(:position).where('`positions`.posx >= ? AND `positions`.posy >= ? AND `positions`.posx <= ? AND `positions`.posy <= ?', tlx, tly, brx, bry) } 
end 

Ensuite, dans votre contrôleur vous suffit de faire:

Trigger.within(top_left_x, top_left_y, bottom_right_x, bottom_right_y) 
+0

Ahh, impressionnant ... est-il possible de avoir plusieurs dans les méthodes/symboles? Où puis-je en savoir plus sur la création d'une portée? – Parris

+0

Oh est: dans juste le nom de la portée? Cool :) – Parris

+0

Je voudrais télécharger une copie de la docs rails consultables d'ici: [railsapi] (http://railsapi.com/) puis rechercher named_scope (rails 2) ou portée (rails 3). Si vous êtes nouveau sur les rails et que vous recherchez des informations sur l'interface de requête, la syntaxe et les exemples, extrayez les documents pour ActiveRecord :: Base (recherchez Base). – mnelson