2010-08-06 5 views
1

Je dois admettre que je ne suis même pas sûr si je mets la bonne question ...Rails - Se référer à l'objet courant dans le modèle

Dans mon application, j'ai un tas de champs appelés à construire des découvertes plus efficaces. Celui que je ne peux pas travailler est:

=> Je veux trouver tous les produits dans la catégorie actuelle et ses descendants. J'utilise la pierre « origine » pour construire l'arbre, et il fournit des champs le nom figure sur le niveau de la classe:

subtree_of(node)  #Subtree of node, node can be either a record or an id 

donc je pensais que ce serait une bonne idée d'avoir un named_scope comme celui-ci:

named_scope :in_tree, :include => :category, :conditions => ['category in (?)', (subtree_of(@category)) ] 

ou

named_scope :in_tree, :include => :category, :conditions => ['category in (?)', (@category.subtree_ids) ] 

les deux choses fonctionnent dans les contrôleurs et les aides, mais pas dans le modèle ... et quand je ne me trompe pas, il se résume à « @Category » (je l'ai défini dans le contrôleur) étant non disponible dans le modèle.

Y a-t-il une façon de le rendre disponible?

Merci pour votre aide!

Val

Répondre

1

Il ne fonctionne pas dans votre modèle, car @category est une variable d'instance qui vit au sein de vos contrôleurs. Vous pouvez passer la catégorie dans le champ nommé à l'aide d'un lambda (fonction anonyme):

named_scope :in_tree, lambda { |category| { :include => :category, 
    :conditions => ['category in (?)', (subtree_of(category)) ] }} 

ou

named_scope :in_tree, lambda { |category| { :include => :category, 
    :conditions => ['category in (?)', (category.subtree_ids) ] }} 

maintenant dans vos contrôleurs/assistants vous pouvez utiliser le champ nommé à l'aide Product.in_tree(@category).

+0

Merci beaucoup John! La deuxième option fonctionne comme un charme! J'ai fait une erreur dans ma question, elle finit par être ceci: named_scope: in_tree, lambda {| category | {: include =>: category, : conditions => ['categories.id in (?)', (category.subtree_ids)]}} –

+0

Cool, content de l'avoir fait fonctionner. –

Questions connexes