неопределенный метод `имя_модели 'в рельсах 3 - PullRequest
0 голосов
/ 04 февраля 2012

При рендеринге XML для объекта я получаю сообщение об ошибке

NoMethodError (неопределенный метод `имя-модели 'для OrderResponse: Class):

OrderResponse.rb

class OrderResponse
   include ActiveModel::Serialization

   attr_accessor :payload
end

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

def create
  @order_response = OrderResponse.new
  @order_response.payload = 12345

  respond_to do |format|
    format.xml { render :xml => @order_response }
  end
end

При поиске я обнаружил другие вопросы с похожими названиями, в соответствии с которыми я изменил 'response_to' с 'response_with', который inturns выдает ошибку

undefinedMethod 'model_name' в OrderResponse

Как решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 08 июня 2012

Я нашел ответ на это где-то в stackoverflow и хотел бы указать источник ... Это моя интерпретация.

В Rails 3, если в ваших маршрутах есть ресурс, который имеетфайл модели .rb, но за ним нет активной таблицы записей, тогда вы увидите такую ​​ошибку.Это появилось для меня как form_for для ссылки на: controller и: action в этой модели.Возможно, это связано с тем, что Rails пытается обработать ассоциации для модели или что-то подобное.В любом случае, для меня это ново, поскольку я обновил приложение с Rails 2.3.8.

Для меня это выглядит так:

неопределенный метод `имя_модели 'для SomeModel: Class

Чтобы исправить это, в верхней части затронутого класса добавьте:

extend ActiveModel::Naming
include ActiveModel::Conversion
def persisted?
  false
end

Это работает для меня на двух моделях, подобных этой.

1 голос
/ 04 февраля 2012

Вы можете попытаться определить метод класса по этому имени, который возвращает имя класса:

def self.model_name; 'OrderResponse'; end
0 голосов
/ 07 февраля 2012

попробуйте включить ActiveSupport::CoreExtensions::Module, где определено имя модели ActiveSupport :: CoreExtensions :: Module

...