如果我有一个项目模型的实例,并且我想使用 active_model_serializer 将其序列化为任意哈希,我可以这样做:
render :json => {:foo => "bar", :model => ProjectSerializer.new(my_project).as_json}
但在我的场景中,我不提前知道模型实例的类型,因此我需要以多态方式确定正确的序列化器。浏览 active_model_serializer 代码,我发现它在内部使用 ActiveModel::Serializer.serializer_for ,但由于某种原因,这不能从 Controller 调用。我可以让它像这样工作:
begin
serializer = Object.const_get "#{model.name}Serializer"
object_hash = serializer.new(model).as_json
rescue NameError
object_hash = model.as_json
end
这工作正常,但我希望我的代码不关心序列化器的这个细节。是否有一种“正确”的方法来查找任意模型的序列化器?
最佳答案
尝试:
model_instance.active_model_serializer
我不知道为什么这没有记录,但它在代码中并且有效。
关于ruby-on-rails - 获取任意(类型未知)模型实例的 ActiveModel::Serializer 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23849456/