2010-09-21 4 views
1

J'ai deux modèles:ActiveRecord trouver avec notamment, les conditions qui seront sur le qui n'affectent pas le parent

class Parent < ActiveRecord::Base 
    has_many :children 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

Je veux trouver tous les parents et leurs enfants, avec des conditions sur les enfants seulement. MAIS si le parent n'a aucun enfant qui correspond à ce critère, je veux toujours le parent.

J'ai essayé ceci:

Parent.all(:include => :children, :conditions => {'children.some_condition' => 'some_value'}) 

Toutefois, cela ne revient pas les parents qui ont pas d'enfants correspondants. Je veux TOUS les parents et seulement les enfants de ces parents qui correspondent à ma condition.

Malheureusement j'utilise Rails 2.1.1. Je voudrais mettre à niveau mais ce n'est pas ma priorité majeure en ce moment, alors considérez cela comme une limitation dans la mise en œuvre possible.
EDIT: Scratch qui, juste mis à niveau vers 2.3.6, était assez indolore

Toute aide est grandement appréciée.

Répondre

0

Je ne suis pas sûr si cela fonctionnera avec Rails 2.1.1, mais je pense qu'il devrait le faire.

Votre condition est appliquée à tous les enregistrements - également pour ceux qui n'ont pas d'enfants. Donc, vous devez ajouter des conditions supplémentaires comme ceci:

Parent.all(:include => :children, :conditions => ["children.some_condition = ? OR children.id is null", "some_value"] 
+0

juste amélioré le service ... c'était en fait assez facile, les tests tous passés ... je vais essayer cela demain quand j'ai l'occasion. – brad

Questions connexes