Eka*_*mpp 17 ruby activerecord ruby-on-rails ruby-on-rails-3
我收到以下错误:SystemStackError: stack level too deep在执行以下代码时,rails3 beta4下ruby 1.9.2-rc1:
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 >
Run Code Online (Sandbox Code Playgroud)
这是由以下代码引起的:
# 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
Run Code Online (Sandbox Code Playgroud)
发生什么了.我一直在检查一下,但似乎没有人有同样的问题.要么它不是相同的ruby版本,因此workflow.rb文件是不同的,或者stack level to deep是由其他东西引起的.
任何帮助都会大大贬低!
最好的祝福
//埃米尔
Sal*_*lil 37
您在方法本身中调用相同的方法
def forum_type_changed?
self.forum_type_changed? #This will never ending process hence it gives error
end
Run Code Online (Sandbox Code Playgroud)
我觉得你有相同的method name和column name这造成的问题改变你的方法名称,然后
def check_forum_type_changed?
self.forum_type_changed? #method name and column name are different
end
Run Code Online (Sandbox Code Playgroud)