I''m using [acts_as_commentable_with_threading](http://github.com/elight/acts_as_commentable_with_threading/), and it worked fine until I tried to overwrite the to_json function to include more details about the associated user. Here''s part of the comment class (which was originally defined in the plugin, but I moved it to the models folder, a move which seems not to affect the error): def to_json(options = {}) { :id => id, :body => body, :parent_id => parent_id, :created_at => created_at, :updated_at => updated_at, :user => user ### the line in question }.to_json(options) end When the line is included, the server responds accordingly the first time you request the resource, but every subsequent request (a particular oddity), I get: SystemStackError (stack level too deep): app/models/comment.rb:21:in `to_json'' C:1:in `__send__'' C:1:in `encode'' C:1:in `__send__'' C:1:in `encode'' app/models/item.rb:61:in `to_json'' app/controllers/items_controller.rb:20 app/controllers/items_controller.rb:18:in `show'' C:/Ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'' C:/Ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'' C:/Ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'' Removing the line prevents the error from showing up. I call associations in to_json elsewhere in the application with no issues. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Steven Xu wrote:> def to_json(options = {}) > { > :id => id, > :body => body, > :parent_id => parent_id, > :created_at => created_at, > :updated_at => updated_at, > :user => user ### the line in question > }.to_json(options) > endLet''s think about what the call to to_json on the Hash is doing... Each key/value pair will be sent the message to_json. I assume the Hash takes care of providing the JSON representation of the more basic types like String, Fixnum, etc. But, what about when to_json gets sent to the user object. Given that Item has_one :user then likely User has_many :items. The item your working with may be contained within an array of user, if user''s to_json includes items. This might explain how you end up with a "stack level too deep." Since I don''t know how your User model is behaving I can''t say for sure that is the problem, but it is something to consider. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Robert Walker wrote:> Each key/value pair will be sent the message to_json. I assume the Hash > takes care of providing the JSON representation of the more basic types > like String, Fixnum, etc. But, what about when to_json gets sent to the > user object. > > Given that Item has_one :user then likely User has_many :items. The item > your working with may be contained within an array of user, if user''s > to_json includes items. This might explain how you end up with a "stack > level too deep." > > Since I don''t know how your User model is behaving I can''t say for sure > that is the problem, but it is something to consider.Thanks for the helpful description. I have made that mistake before (not with cross-model associations, which are pretty easy to catch, but with a nested set when I tried to establish aunt and uncle relationships), and I am sure it''s not the case here. Typically, I force jsonning associations to be manually declared in the options rather than enable them by default, but I did it here because I ruled it out as a cause. For the record, the to_json instance method on User doesn''t invoke any associations. I am at a loss of how to troubleshoot this because: (1) The "works once then fails thereafter" behaviour is really weird. (2) I can''t reproduce the error through the console (which produces the expected JSON output, user and all) -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Frederick Cheung
2010-Jul-15 07:25 UTC
Re: `stack level too deep` when overwriting `to_json`
On Jul 14, 10:48 pm, Steven Xu <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Robert Walker wrote:> I am at a loss of how to troubleshoot this because: > > (1) The "works once then fails thereafter" behaviour is really weird.Does it only happen when class caching is turned off ? (don''t forget to restart the server after you change that) Fred> (2) I can''t reproduce the error through the console (which produces the > expected JSON output, user and all) > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.