Mongomapper / mongoDB: SystemStackError: слишком большой уровень стека - PullRequest
1 голос
/ 23 июля 2010

У меня есть Rails 3 модель "D", которая принадлежит другой модели, которая, в свою очередь, принадлежит еще двум:

D belongs to C
C belongs to B
B belongs to A

Я использую MongoDB / Mongomapper в качестве ORM.

Когда я пытаюсь создать экземпляр D, я получаю сообщение об ошибке:

ruby-1.9.2-preview3 > d = D.new
SystemStackError: stack level too deep
from /Users/peter/.rvm/rubies/ruby-1.9.2-preview3/lib/ruby/1.9.1/irb/workspace.rb:80
Maybe IRB bug!!

У меня нет проблем с созданием экземпляров и работой с тремя другими моделями.

Ниже приведена более подробная информация о моей настройке:

Агентство имеет много свойств, которые имеют много проверок, которые имеет много предметов. И в контроллере, и в IRB я пытаюсь получить элементы, которые принадлежат документу / экземпляру проверки, и получают Ошибка "слишком большой уровень стека".

class Agency 
  include MongoMapper::Document 
  key :name, String 
  timestamps! 
  # Assocations ::::::::::::::::::::::::::::::::::::::::::::::::::::: 
  many :properties 
end 

class Property 
  include MongoMapper::Document 
  timestamps! 
  # Assocations ::::::::::::::::::::::::::::::::::::::::::::::::::::: 
  belongs_to :agency 
  many :inspections 
  key :address_postcode, String 
end 

class Inspection 
  include MongoMapper::Document 
  timestamps! 
  # Assocations ::::::::::::::::::::::::::::::::::::::::::::::::::::: 
  belongs_to :property 
  many :items 
  key :date, Date 
end 

class Item 
  include MongoMapper::Document 
  timestamps! 
  # Assocations ::::::::::::::::::::::::::::::::::::::::::::::::::::: 
  belongs_to :inspection 
  key :area_comment, String 
end 

В контроллере:

def show 
        @inspection = Inspection.find_by_id(params[:id]) 
        @items = @inspection.items 
        puts "Inspection: #...@inspection.id}" 
        puts "Items: #{@items}" 
        respond_to do |format| 
            format.html # show.html.erb 
            format.json  { render :json => @items } 
        end 
end 

Затем в IRB:

Loading development environment (Rails 3.0.0.beta4) 
ruby-1.9.2-preview3 > inspection = Inspection.find_by_id("4c4e183d55899f3d66000002") 
=> #<Inspection _id: BSON::ObjectID('4c4e183d55899f3d66000002'), 
created_at: Mon, 26 Jul 2010 23:20:37 UTC +00:00, updated_at: Mon, 26 
Jul 2010 23:22:04 UTC +00:00, date: nil, property_id: BSON::ObjectID('4c4e181a55899f3d66000001')> 
ruby-1.9.2-preview3 > puts inspection.items 
SystemStackError: stack level too deep 
from /Users/peter/.rvm/rubies/ruby-1.9.2-preview3/lib/ruby/1.9.1/irb/ 
workspace.rb:80 
Maybe IRB bug!! 

ИЛИ, в браузере:

URL: http://localhost:3000/items/4c4e183d55899f3d66000002 
Returns: 
500 Internal Server Error 
If you are the administrator of this website, then please read this web application's log file and/or the web server's log file to find out what went wrong. 
while in the log console: 
Started GET "/items/4c4e183d55899f3d66000002" for 127.0.0.1 at 
2010-07-28 10:53:57 +1000 
Processing by ItemsController#show as HTML 
Parameters: {"id"=>"4c4e183d55899f3d66000002"} 
Completed   in 24ms 
SystemStackError (stack level too deep): 
/Users/peter/.rvm/gems/ruby-1.9.2-preview3@rails300/gems/ 
activesupport-3.0.0.beta4/lib/active_support/callbacks.rb:419 
Rendered /Users/peter/.rvm/gems/ruby-1.9.2-preview3@rails300/gems/ 
actionpack-3.0.0.beta4/lib/action_dispatch/middleware/templates/ 
rescues/_trace.erb (1.2ms) 
Rendered /Users/peter/.rvm/gems/ruby-1.9.2-preview3@rails300/gems/ 
actionpack-3.0.0.beta4/lib/action_dispatch/middleware/templates/ 
rescues/_request_and_response.erb (3.6ms) 
Rendered /Users/peter/.rvm/gems/ruby-1.9.2-preview3@rails300/gems/ 
actionpack-3.0.0.beta4/lib/action_dispatch/middleware/templates/ 
rescues/diagnostics.erb within rescues/layout (45.7ms) 

Есть идеи? Что я делаю неправильно?

Спасибо, Петр

Ответы [ 2 ]

2 голосов
/ 30 сентября 2013

Я использовал: класс в качестве атрибута модели в моей модели, которая оказалась зарезервированной, измените, что имя атрибута сделало работу за меня.

2 голосов
/ 28 июля 2010

Проблема была с моделью предмета. Он содержал ключ ": keys". Возможно, «: keys» зарезервировано, но в любом случае, как только я его переименовал, проблема была решена.

...