Stack level too deep

Stack Level too deep means there is some function recursing, probably
forever. Looking over your code real quick I’ve seen the :has_many
organizations which probably leads to the recursion. When trying to get
the parents, Rails will get the Parents of the Parents and so on since
it is a property of the Organization so I guess it is not lazy
evaluated. Maybe that helps…

On 2011-03-26 22:25:00 +0100, [email protected] Wrote:

Philipp F. wrote in post #989443:

Stack Level too deep means there is some function recursing, probably
forever. Looking over your code real quick I’ve seen the :has_many
organizations which probably leads to the recursion. When trying to get
the parents, Rails will get the Parents of the Parents and so on since
it is a property of the Organization so I guess it is not lazy
evaluated. Maybe that helps…

On 2011-03-26 22:25:00 +0100, [email protected] Wrote:

Thanks Philipp… I commented the has_many :organizations sentence but it
still keeps showing the errors… The issue in my code comes from this
place

def self.parents

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

I guess it keeps asking itself about the companies which are companies
within the same table… What do you think?

Leo

On 26 March 2011 23:10, Leobardo C. [email protected] wrote:

The issue in my code comes from this
place

def self.parents

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

I guess it keeps asking itself about the companies which are companies
within the same table… What do you think?

yep… and “self” is one of those companies, so it keeps looping…

Add a condition to exclude the current record:

@organizations = Organization.where([“is_company = ? AND id <>
?”,true, self.id])

(or whatever it takes - I’m not into Rails 3 yet… too much old 2.x
stuff to do!)

On 26 March 2011 23:34, Michael P. [email protected] wrote:

yep… and “self” is one of those companies, so it keeps looping…

Ignore me… I see that’s a class method, so won’t have an instance
id…

On 26 March 2011 23:10, Leobardo C. [email protected] wrote:

def self.parents

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

I guess it keeps asking itself about the companies which are companies
within the same table… What do you think?

I assume that the “parents” method returns all the Organizations which
have child organisations?

If so, you’re using this method instead of a scope?
Can’t you do something along the lines of the pseudo-SQL below:

SELECT * FROM organisations WHERE organisations.id IN (SELECT
parent_id FROM organisations GROUP BY parent_id)

If you can get it working in SQL, you can turn it into a scope.

Michael P. wrote in post #989454:

On 26 March 2011 23:10, Leobardo C. [email protected] wrote:

def self.parents

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

I guess it keeps asking itself about the companies which are companies
within the same table… What do you think?

I assume that the “parents” method returns all the Organizations which
have child organisations?

If so, you’re using this method instead of a scope?
Can’t you do something along the lines of the pseudo-SQL below:

SELECT * FROM organisations WHERE organisations.id IN (SELECT
parent_id FROM organisations GROUP BY parent_id)

If you can get it working in SQL, you can turn it into a scope.

Find the solution dude. It was an scope as you did… Here is my answer
for anyone there facing the same problem.

======================================================================

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

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

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