2010-05-18 5 views
0

J'ai un modèle comme celui-ci:relation conditionnelle

Stem 
    -id 
    -etc 

Et puis je

Stemrelation 
    -stem_id 
    -related_stem_id 
    -active 

je peux obtenir les tiges avec les associés relations suivantes

class Stem < ActiveRecord::Base 
    has_many :stemrelations 
    has_many :related_stems, :through => :stemrelations 
end 

class Stemrelation < ActiveRecord::Base 
    belongs_to :stem 
    belongs_to :related_stem, :class_name => "Stem", :foreign_key => "related_stem_id" 
end 

Mais maintenant je voudrais seulement avoir les relations actives.

J'ai essayé d'ajouter ceci au modèle de la tige:

has_many :active_related, :through => :stemrelations, :source => :related_stem, :conditions => {:active => true} 

mais cela me donne une erreur becasue il essaie de vérifier le drapeau actif sur le modèle de la tige au lieu du stemrelation. Qu'est-ce que je change ici?

Merci!

Répondre

1

Etes-vous sûr que vous avez besoin d'une association conditionnelle. Peut-être named_scope correspond ici:

class Stem < ActiveRecord::Base 
    has_many :stemrelations 
    has_many :related_stems, :through => :stemrelations 

    named_scope :active, :conditions => {:active => true} 
end 

Vous pouvez l'utiliser comme ceci:

Stem.first.related_stems.active 
0

pour les conditions, vous devez utiliser la syntaxe SQL.