如果我有一个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
这很好用,但我宁愿我的代码不关心序列化器的这个细节。有没有"权利"找到任意模型的序列化器的方法?
答案 0 :(得分:3)
尝试:
model_instance.active_model_serializer
我不确定为什么没有记录,但它在代码中并且有效。
答案 1 :(得分:0)
对于Rails 5(ActiveModelSerializers 0.10)您可以使用ActiveModelSerializers::SerializableResource.new(model_instance)
,然后在其上调用#serializable_hash
或#to_json
。自述文件中提供了更多详细信息:https://github.com/rails-api/active_model_serializers/blob/655c721d0d18988be795d767797cdcddc5369a87/README.md