2010-06-16 4 views
0

J'utilise ruby ​​sur rails 2.3.8 et quand j'écris la syntaxe ci-dessous je reçois le message d'erreur "niveau de pile trop profond".Je reçois une erreur "pile niveau trop profond" lors de l'utilisation d'une portée nommée

Le modèle est appelé annonce et la ligne de l'erreur ressemble à ceci:

Tag.find(category_id).announcements.published 

published est

named_scope :published, :conditions => "announcements.state = 'published'" 

J'utilise cette étendue nommée dans beaucoup d'autres endroits et il fonctionne très bien.

Qu'est-ce que je fais mal? (La relation entre le modèle Tag et Annonce est correcte car si je supprime la méthode ".published" de cette ligne, cela fonctionne très bien).

EDIT:

relations de modèle sont:

class Tagging < ActiveRecord::Base 
    belongs_to :announcement 
    belongs_to :tag 
end 

class Tag < ActiveRecord::Base 
    has_many :taggings 
    has_many :announcements, :through => :taggings 
end 

class Announcement < ActiveRecord::Base 
    has_many :taggings 
    has_many :tags, :through => :taggings 

Répondre

0

Stack Niveau trop profond vient normalement lorsque des rails est récursivement la même méthode/fonction.

Essayez de changer votre état et vérifier à nouveau, parce que je pense qu'il peut y avoir des conflits published mot

Bonne façon de debug serait commencer par

Tag.find(category_id) 

alors s'il n'y a pas erros

Tag.find(category_id).announcements 

et encore vous êtes ok alors

Tag.find(category_id).announcements.published 

par cette façon, vous trouverez exactement où le problème est

acclamations

Sameera

+0

J'ai débogué toutes les étapes et le problème est quand j'ajoute ".published" à cette ligne. Est-il possible que les relations de mon modèle soient fausses? Je vais éditer mon post avec eux. –

0

Je ne sais pas si cela est le problème, mais pourriez-vous s'il vous plaît essayer d'utiliser le named_scope comme ce qui suit et dites-nous si cela a fonctionné?

named_scope :published, :conditions => "state = 'published'" 
0

Où avez-vous écrit la portée nommée?

vous devriez écrire dans le modèle d'annonce et vous devez modifier un peu

named_scope :published, :conditions => {:state => "published"} 

Je pense que vous avez écrit le named_scope publié dans un autre modèle, s'il vous plaît me corriger si je me trompe.

+0

Je n'ai aucune autre portée nommée appelée comme ça. –

Questions connexes