我想合并两个模型并对它们进行排序,并在我的序列化器上公开结果。
所以在我的用户控制器中我有
#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>)
编辑:错字
答案 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 }