2010-11-08 10 views
0

J'ai essayé de comprendre comment utiliser correctement les scopes pour l'exemple suivant.Rails 3 - Scopes polymorphes et globales

Avoir une table Notes qui a une association polymorphe aux éléments. Mais je permets aussi qu'il y ait des notes "globales", donc quand je fais une portée sur Notes, je voudrais qu'elle renvoie l'association polymorphe aux éléments et le champ polymorphique NULL, avec d'autres conditions comme les booléens de type IsReviewed. J'ai essayé de faire ce qui suit mais ça ne marche pas bien.

scope :is_reviewed, lambda { { :include => [:category, :notable], :conditions => ["is_reviewed = ?", true] } }

puis essayé, mais ne retourne pas les "globaux" les

scope :is_reviewed, lambda { { :include => [:category, :notable], :conditions => ["notable_type = 'Item' and is_reviewed = ?", true] } }

et essayé, mais ne semble pas fonctionner correctement

scope :is_reviewed, lambda { { :include => [:category, :notable], :conditions => ["(notable_type = 'Item' or notable_type = NULL) and is_reviewed = ?", true] } }

Toute pensée ou aide serait grandement appréciée. THanks

Répondre

0

J'ai effectivement remarqué que j'avais un autre problème qui a causé cette portée à ne pas fonctionner. La portée suivante fonctionne réellement pour récupérer les objets notables quand il existe et vous pouvez rechercher sur le type notable dans les partiels ou les assistants pour faire la logique correcte pour le type de notable.

scope :is_reviewed, lambda { { :include => [:category, :notable], :conditions => ["is_reviewed = ?", true] } }