Rails API Serializer

时间:2017-03-18 16:27:04

标签: ruby-on-rails

我想合并两个模型并对它们进行排序,并在我的序列化器上公开结果。

所以在我的用户控制器中我有

  #users_controller.rb

  def transactions
    @debit = current_user.debits.all
    @credit = current_user.credits.all
    @history = [@debit, @credit].flatten
    @sorted_history = @history.sort_by { |item| item.created_at.strftime('%m/%d/%y') }
    render json: UserTransactionSerializer.new(@sorted_history).call
  end

在我的序列化器上我有:

module Api
  module V1
    class UserTransactionSerializer < BaseSerializer
      def call
        {
          id: object.id,
          amount: object.amount,
          status: object.status,
          created_at: object.created_at.iso8601
        }
      end
    end
  end
end

我收到这个错误:

NoMethodError (undefined method `id' for #<Array:0x0055ce49b57b20>)

编辑:错字

2 个答案:

答案 0 :(得分:1)

object是一个数组,所以你必须迭代并返回该数组中每个对象的哈希值。

def call
  object.map do |obj|
    {
      id: obj.id,
      amount: obj.amount,
      status: obj.status,
      created_at: obj.created_at.iso8601
    }
  end
end

答案 1 :(得分:1)

您的@sorted_history是一个数组,但应在对象中传递UserTransactionSerializer

如此简单的解决方案将是:

render json: @sorted_history.map{ |trans| UserTransactionSerializer.new(trans).call }