Dim*_*bas 9 ruby ruby-on-rails rails-api active-model-serializers
我们在Rails应用程序中使用active_model_serializers - 0.8.1.
该应用程序有一些API特定的控制器继承自ActionController :: Metal,其方式类似于rails-api的ActionController :: API.
好吧,我们只想将ActiveModel :: Serializers用于上面提到的API控制器.
这可能吗,怎么样?
注意:
如文档中所述,通过替换可以明确避免使用序列化程序
render :json  
有:
render :json => @your_object.to_json
我们正在寻求比上述解决方案更优雅的解决方案.
谢谢.
小智 5
你也可以这样做:
respond_with @your_object, serializer: nil
您可以重写default_serializer_options控制器上的方法以禁用该控制器中所有操作的序列化器。
def default_serializer_options
  {
    serializer: nil
  }
end
我们目前正在以其他方式生成 JSON,但我想调查ActiveModel::Serializers特定资源。这时我发现添加 gem 意味着所有控制器将尝试使用序列化器。不仅仅是我想测试该方法的一个。
默认情况下使用序列化器是很好的选择,但我们需要一些时间将现有控制器过渡到这种方法。我更新了其他现有控制器以不使用序列化器(使用上述方法),因此我可以在逐个控制器的基础上添加序列化器。
不知道有没有优雅的解决方案。看来你必须猴子补丁 ActionController::Serialization - https://github.com/rails-api/active_model_serializers/blob/5a92e00b51927c9c0e7c90f92c825aff09314bfd/lib/action_controller/serialization.rb。
最小的改变可能是重写该build_json_serializer方法并在您不想使用 ActiveModelSerializers 的控制器中返回 nil 。如果build_json_serializer在控制器中始终返回 nil,则行为应默认为非 AMS 序列化
不幸的是,这个类似乎没有很好的修改结构(私有方法等),因此您可能需要提交拉取请求以使您的任务更容易。在 AMS 包含之前保留“原始”方法的别名_render_option_json、将其设置为build_json_serializer受保护而不是私有,或者添加一个配置选项以在每个控制器的基础上禁用 AMS 都是合理的修改。