Ruby on rails ActiveModelSerializers gem:如何将参数传递给序列化程序

Ruby on rails ActiveModelSerializers gem:如何将参数传递给序列化程序,ruby-on-rails,ruby,json,active-model-serializers,Ruby On Rails,Ruby,Json,Active Model Serializers,我正在将gem从版本0.9.5更新到版本0.10.1。对于版本0.9.5,下面的代码有效 控制器: def create ... render json: @dia, app_rights: app_rights(@dia) end 序列化程序: class Api::V1::SerializerWithSessionMetadata < ActiveModel::Serializer attributes :app_rights def app_rights s

我正在将gem从版本0.9.5更新到版本0.10.1。对于版本0.9.5,下面的代码有效

控制器:

def create
  ...
  render json: @dia, app_rights: app_rights(@dia)
end
序列化程序:

class Api::V1::SerializerWithSessionMetadata < ActiveModel::Serializer
  attributes :app_rights
  def app_rights
    serialization_options[:app_rights]
  end
end
class Api::V1::SerializerWithSessionMetadata
0.10.1版中已弃用了方法
序列化\u选项

  • 建议使用
    instance\u选项
  • 建议使用
    选项
    :“实例_选项仅在主分支中可用,在当前RC中不可用。在当前RC中,您必须使用选项”
  • 还有关于
    @options
    @instance\u options
    的建议

我已尝试用上述所有选项替换
序列化\u选项
。但是,在所有情况下,在更新gem之后,生成的json不包括
app\u权限
。我做错了什么?

使用实例\u选项,序列化程序应该如下所示:

class Api::V1::SerializerWithSessionMetadata < ActiveModel::Serializer
    attributes :app_rights
    def app_rights
        @instance_options[:app_rights]
    end
end

您使用的是什么rails和ruby版本?根据changelog对Rails 4.0和ruby 2.0.0的支持,使用最新版本:ruby 2.3.1和Rails 4.2.6hmmm。有趣的是,他们说0.10.x与0.9或0.8不向后兼容,可能是“缺少迁移指南”的错误?答案很简单:使用
实例_选项
代替感谢,通过指定其工作的序列化程序(事实证明,我现在需要在整个应用程序中的任何地方指定序列化程序,而不仅仅是上面的示例)。这真的很奇怪,如果可能的话,我想找出原因。这就是我发现的:对于新的gem版本,如果我没有在控制器中指定序列化程序,它仍然会自动使用正确的序列化程序,但它不会序列化在序列化程序中的方法内计算的属性。换句话说,它只序列化可以直接从数据库读取的属性。对此有什么想法吗?如果AMS没有找到正确的序列化程序,它只会将对象转换为json,json将只读取DB属性。只有在@dia是MyObject的情况下,将序列化程序类命名为MyObjectSerializer,AMS才会自动链接正确的序列化程序。
render json: @dia, serializer: SerializerWithSessionMetadata, app_rights: app_rights(@dia)