Stack level too deep from has_many / belongs_to relationship


#1

I have the following 3 models (2 models joined by an intermediate):

  1. class Exercise < ActiveRecord::Base

  2. has_many :routines, :class_name=>‘RoutineExercise’

  3. end

  4. class Routine < ActiveRecord::Base

  5. has_many :exercises,

  6.        :class_name=>'RoutineExercise',
    
  7.        :order=>'position'
    
  8. end

  9. class RoutineExercise < ActiveRecord::Base

  10. set_table_name “exercises_routines”

  11. set_primary_key ‘join_id’

  12. belongs_to :routine

  13. belongs_to :exercise

  14. acts_as_list :scope => :routine_id

  15. end

From this I’m getting ‘stack level too deep’ errors:

#{RAILS_ROOT}/vendor/rails/activerecord/lib/active_record/associations.rb:877:in
create_has_many_reflection' #{RAILS_ROOT}/vendor/rails/activerecord/lib/active_record/associations.rb:346:inhas_many’
#{RAILS_ROOT}/app/models/routine.rb:2
#{RAILS_ROOT}/app/models/routine_exercise.rb:5
#{RAILS_ROOT}/app/models/routine.rb:2
… snip …
#{RAILS_ROOT}/app/models/routine_exercise.rb:5
#{RAILS_ROOT}/app/models/routine.rb:2
#{RAILS_ROOT}/app/controllers/items_controller.rb:462:in const_get' #{RAILS_ROOT}/app/controllers/items_controller.rb:462:initem_class’
#{RAILS_ROOT}/app/controllers/items_controller.rb:112:in `new’

So this seems to be getting into a recursive loop around the
RoutineExercise belonging to Routine and Routine having many
RoutineExercises, but I can’t work out why.

Thanks in advance.


#2

Turns out to be a combination of edge rails and rails_engines.

There’s a patch here which fixes it:
https://opensvn.csie.org/traccgi/rails_engines/trac.cgi/ticket/63

Thanks.


R.Livsey
http://livsey.org