2010-07-17 4 views
16

Je reçois l'erreur suivante: SystemStackError: stack level too deep lors de l'exécution du code suivant dans rails3 beta4 sous ruby 1.9.2-rc1:Pourquoi ai-je un « SystemStackError: niveau de pile trop profond » dans mon rails3 modèle beta4

ruby-1.9.2-rc1 > f = Forum.all.first 
    => #<Forum id: 1, title: "Forum 1", description: "Description 1", content: "Content 1", parent_id: nil, user_id: 1, forum_type: "forum", created_at: "2010-07-17 04:39:41", updated_at: "2010-07-17 04:39:41", icon_file_name: nil, icon_content_type: nil, icon_file_size: nil, icon_updated_at: nil> 
ruby-1.9.2-rc1 > f.children 
    => [#<Forum id: 2, title: "Thread 2", description: "Description 2", content: "Content 2", parent_id: 1, user_id: 1, forum_type: "thread", created_at: "2010-07-17 04:40:17", updated_at: "2010-07-17 04:40:17", icon_file_name: nil, icon_content_type: nil, icon_file_size: nil, icon_updated_at: nil>] 
ruby-1.9.2-rc1 > f.forum_type = "thread" 
    => "thread" 
ruby-1.9.2-rc1 > f.save 
SystemStackError: stack level too deep 
from /Users/emilkampp/.rvm/rubies/ruby-1.9.2-rc1/lib/ruby/1.9.1/irb/workspace.rb:80 
Maybe IRB bug!! 
ruby-1.9.2-rc1 > 

Et c'est causé par le code suivant:

# Before and after filters 
# 
before_update :update_all_nested_objects, :if => :forum_type_changed? 

protected 
    # Checks if the +forum_type+ has been changed 
    # 
    def forum_type_changed? 
    self.forum_type_changed? 
    end 

    # Updates all nested upjects if the +forum_type+ has been changed 
    # 
    # This will trigger the +update_all_nested_objects+ method on all touched children, thus 
    # starting a chain-reaction all the way through the forum-tree. 
    # 
    # NOTE: This is where the error is triggered, since this is the only non-tested looping code, and my test- 
    #  cases hasn't changed since this was added. 
    # 
    def update_all_nested_objects 
    children.each do |child| 
     child.forum_type = child_type 
     child.save 
    end 
    end 

Alors, que se passe-t-il? J'ai vérifié un peu, mais personne ne semble avoir le même problème. Soit ce n'est pas la même version de ruby, donc le fichier workflow.rb est différent, ou le stack level to deep est causé par autre chose.

Toute aide sera grandement appréciée!

Meilleures salutations

// Emil

Répondre

33

Vous appelez même méthode dans la méthode elle-même

def forum_type_changed? 
    self.forum_type_changed? #This will never ending process hence it gives error 
    end 

Je pense que vous avez même method name et column name ce problème provoquant changer votre nom de méthode puis

def check_forum_type_changed? 
    self.forum_type_changed? #method name and column name are different 
    end 
Questions connexes