Исключение переполнения стека в Rails 3.2 ActiveRecord - PullRequest
2 голосов
/ 08 февраля 2012

Наличие странной проблемы с Rails 3.2.1. Работаю с устаревшей базой данных с неприличными именами столбцов, и я пытаюсь очистить их в моей модели Следующая модель отлично работает в HTML, но при ответе с помощью JSON или XML выдается ошибка stack level too deep:

class Order < ActiveRecord::Base
    set_table_name 'ordersum'
    set_primary_key 'ordernbr'

    alias_attribute 'id','ordernbr'
    alias_attribute 'customer_id', 'custid'
    alias_attribute 'shipping_name', 'sname'
    alias_attribute 'shipping_company','scompany'
    alias_attribute 'shipping_address1','saddress1'
    alias_attribute 'shipping_address2','saddress2'
    alias_attribute 'shipping_city','scity'
    alias_attribute 'shipping_state','sstate'
    alias_attribute 'shipping_zip','zip'
    alias_attribute 'shipping_country','scountry'
    alias_attribute 'shipping_phone','sphone'
    alias_attribute 'shipping_method','shipvia'
    alias_attribute 'subtotal','product'
    alias_attribute 'shipping', 'freight'
    alias_attribute 'handling', 'handling'
    alias_attribute 'total', 'ordertot'
    alias_attribute 'transaction_id', 'vsTransactionId'
    alias_attribute 'reference_number', 'vsrefnbr'
    alias_attribute 'approval_code', 'vsappcode'
    alias_attribute 'created_on', 'entereddtm'
end

class OrdersController < ApplicationController
  respond_to :html, :xml, :json

  def index
    @orders = Order.all
    respond_with @orders
  end
end

Порядок слишком большой, без следа стека.

Edit # 1 Framework / Full trace имел 1 элемент:

actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:70

Редактировать # 2 Найдены некоторые дополнительные детали после копания. Сделал консоль рельсов и Order.find и получил ошибку ниже. Обратите внимание, что Order.all отлично работает.

C:\Users\Rich\App>rails console
Loading development environment (Rails 3.2.1)
irb(main):001:0> Order.find(1)
  ←[1m←[36mOrder Load (1.0ms)←[0m  ←[1mSELECT `ordersum`.* FROM `ordersum` WHERE `ordersum`.`ordernbr` = 1 LIMIT 1←[0m
SystemStackError: stack level too deep
        from C:/ruby/lib/ruby/1.9.1/logger.rb:443
irb(main):002:0>

1 Ответ

8 голосов
/ 08 февраля 2012

Вы имели в виду псевдоним handling для себя?

alias_attribute 'handling', 'handling'

Это взорвет ваш стек прямо вверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...