2010-10-01 6 views
0

Je reçois une erreur named_scope, est-ce que j'essaie de l'utiliser incorrectement?erreur named_scope sur l'association belongs_to

class Owner < ActiveRecord::Base 
    has_many :dogs 

    named_scope :is_fit?, :conditions => { :age => 16..40 } 
end 

class Dog < ActiveRecord::Base 
    belongs_to :owner 

    def is_owner_fit? 
    owner.is_fit? 
    end 

end 

undefined method `is_fit?' for #<ActiveRecord::Associations::BelongsToAssociation:0x251807c> 

Répondre

2

Tout d'abord, par les conventions en Ruby, les méthodes se terminant par un point d'interrogation doit retourner soit vrai ou faux. Votre named_scope renverra les propriétaires qui sont en forme, et ne pas tester leur forme physique ... Je voudrais écrire quelque chose comme:

class Owner < ActiveRecord::Base 
    has_many :dogs 
    FIT_RANGE = (16..40) 

    named_scope :fit, :conditions => ["owners.age IN (?)", FIT_RANGE.to_a] 

    def is_fit? 
    FIT_RANGE.include?(age) 
    end 
end 

class Dog < ActiveRecord::Base 
    belongs_to :owner 

    def is_owner_fit? 
    owner.is_fit? 
    end 

end 
+0

Merci Yannis, quelques autres questions que j'ai. Premièrement, dans votre exemple, la portée nommée ne semble pas être utilisée. Deuxièmement, quand j'ai eu ce problème à l'origine, j'ai utilisé une méthode comme celle que vous avez décrite ci-dessus, mais j'avais alors besoin de savoir s'il y avait des propriétaires d'une collection de propriétaires, par exemple propriétaires.is_fit.exists? donc je pensais que j'utiliser un named_scope. Je voudrais la logique de savoir si le propriétaire est apte ou non à exister en un seul endroit, donc je ne veux pas faire un named_scope et une méthode. – pingu

+0

Je viens d'utiliser une constante comme la gamme d'âges. C'est l'ensemble en un seul endroit. Vous pouvez ou non utiliser l'attribut named_scope pour récupérer les propriétaires qui correspondent à la base de données. – Yannis