【发布时间】:2014-07-14 00:10:33
【问题描述】:
如果我有一个 Project 模型的实例,并且我想使用 active_model_serializer 将其序列化为任意散列,我可以这样做:
render :json => {:foo => "bar", :model => ProjectSerializer.new(my_project).as_json}
但在我的场景中,我不提前知道模型实例的类型,因此我需要多态地确定正确的序列化程序。查看 active_model_serializer 代码,我看到它在内部使用ActiveModel::Serializer.serializer_for,但由于某种原因,这不能从控制器调用。我可以让它像这样工作:
begin
serializer = Object.const_get "#{model.name}Serializer"
object_hash = serializer.new(model).as_json
rescue NameError
object_hash = model.as_json
end
这很好用,但我宁愿我的代码不关心序列化程序的这个细节。是否有一种“正确”的方法可以找到任意模型的序列化程序?
【问题讨论】:
标签: ruby-on-rails ruby serialization active-model-serializers