活动模型序列化程序respond_with导致未定义的方法" to_model"?

时间:2016-07-23 21:36:45

标签: ruby-on-rails active-model-serializers

我有一个简单的模型:

class Receipt
  include ActiveModel::Serialization
  attr_accessor :products
end

我的控制器在做:

def create
  respond_with receipt, :serializer => ReceiptSerializer
end

和序列化器:

class ReceiptSerializer < ActiveModel::Serializer
  attributes :products
end

我得到了:

 NoMethodError:
   undefined method `to_model' for #<Receipt:0x007f99bcb3b6d8>

然而,如果我将控制器更改为:

def create
  json = ReceiptSerializer.new(receipt)
  render :json => json
end

然后一切正常......发生了什么???

我使用的是active_model_serializers 0.9.3,但只是尝试了0.10.2,结果是一样的。

2 个答案:

答案 0 :(得分:1)

在我阅读的所有文档和个人实施中,我使用render json:代替respond_with

render json: receipt, serializer: ReceiptSerializer

我认为respond_with已被删除,并且不再被视为最佳做法,但我找不到用于验证该声明的链接。

答案 1 :(得分:0)

我不完全确定,但在您的收据PORO中,您应该包括:ActiveModel::SerializerSupport

我无法确认这是否适用于active_model_serializers 0.10.2虽然