ruby-on-rails - 获取任意(类型未知)模型实例的 ActiveModel::Serializer 实例

标签 ruby-on-rails ruby serialization active-model-serializers

如果我有一个项目模型的实例,并且我想使用 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/

相关文章:

ruby-on-rails - ActiveRecord - 用警告替换模型验证错误

ruby-on-rails - 如何在 Rails UJS 中设置超时?

ruby - 使用 Selenium WebDriver 启用/禁用 javascript

php - 尝试通过在 Laravel 5.2 中实现 ArraySerializer 来删除 Fractal 中的数据

java - serialVersionUID 是否由子类继承,如果我在父类(super class)中有默认的 serialVersionUID

java - 在 Java 对象之间复制数据的最快方法是什么?

ruby-on-rails - NameError:未初始化的常量 Minitest::VERSION

ruby-on-rails - ActiveRecord::Errors 的 Rails 3 替代品是什么?

ruby - Ruby Blocks 有简写吗?

ruby - Rspec: "array.should == another_array"但不关心顺序