Search code examples
ruby-on-railsruby

Stack level too deep error in Ruby on Rails


I'm having a stack level too deep error using Ruby 1.8.7 with Rails 3.0.4 and with the rails console I performed the following commands.

leo%>rails console
Loading development environment (Rails 3.0.4)
ruby-1.8.7-head > leo = Organization.find(1)

SystemStackError: stack level too deep
from /app/models/organization.rb:105:in `parents'

Here is the object that is having issues..

class Organization < ActiveRecord::Base

  has_many                  :group_organizations, :dependent =>
:delete_all
  has_many                  :groups, :through => :group_organizations

  has_many                  :orders
  has_many                  :product_contracts

  has_many                  :people
  accepts_nested_attributes_for :people

  has_many                  :addresses
  accepts_nested_attributes_for :addresses

  has_many                  :organizations
  has_many                  :departments
  has_many                  :organization_credits

  has_many                  :documents

  validates_presence_of     :name



    def self.parents
      @organizations = Organization.where("is_company = ?",true)
      #@organization_parents = []
      select_choice = I18n.t("select") + " "+ I18n.t("segments.description")
      @organization_parents = [select_choice]
      for organization in @organizations
        @organization_parents << [organization.name, organization.id]
      end
      return @organization_parents
    end

Solution

  • I've found the solution to this issue...

    I'm using Rails 3 and my class looks like this (and the problematic methods was this too)

    class Organization < ActiveRecord::Base
      def self.parents
        @organizations = self.find :all, :conditions => ['is_company = ? ',true]
        select_choice = I18n.t("select") + " "+ I18n.t("segments.description")
        @organization_parents = [select_choice]
        for organization in @organizations
          @organization_parents << [organization.name, organization.id]
        end
        return @organization_parents
      end 
      #...
    end
    

    I did have to hack a lot in the code to find out something was wrong with the named_scope on the line

    @organizations = self.find :all, :conditions => ['is_company = ? ',true]
    

    So I had to change it to something like this

    @organizations = Organization.where("is_company = ?",true)
    

    But it was wrong too.. So I decided to add an scope for this below the class name so the final code looks like this:

    class Organization < ActiveRecord::Base
      scope :company, where("is_company = ?",true)
    
      def self.parents
        @organizations = self.company
        select_choice = I18n.t("select") + " "+ I18n.t("segments.description")
        @organization_parents = [select_choice]
        for organization in @organizations
          @organization_parents << [organization.name, organization.id]
        end
        return @organization_parents
      end 
      #...
    end
    

    So using this line with the scope

    @organizations = self.company
    

    it worked flawlessly in every part of the code.

    I was wondering if the named_scope is deprecated when using class methods or they are not supported from now and throws an error and not a warning before

    Thanks for your help Leo