【问题标题】:Access params inside ActiveModel Serializers访问 ActiveModel 序列化程序中的参数
【发布时间】:2014-04-26 20:31:09
【问题描述】:

我目前需要访问序列化程序中的参数,但不确定这里最好的方法是什么。

基本上我只是访问参数哈希内的时区,以响应转换为该时区的模型时间属性。

【问题讨论】:

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


    【解决方案1】:

    我创建了一个简单的结构对象来允许访问当前用户和参数哈希,如下所示:

    SerializerScope = Struct.new(:current_resource_owner, :params)
    

    我将该声明放在初始化程序中,然后在我的主 API 控制器中使用它:

    def default_serializer_options
      {
        scope: SerializerScope.new(current_resource_owner, params)
      }
    end
    

    在我的序列化程序中,我可以访问scope.current_resource_ownerscope.params

    由于您需要在测试中正确存根,因此测试工作变得更加繁琐:

    serializer_scope = SerializerScope.new
    serializer_scope.current_resource_owner = # a user
    serializer_scope.params = {} # override and re-stub within controller action tests
    MySerializer.any_instance.stub(scope: serializer_scope)
    

    显然,请确保当您从序列化程序内部访问参数时,某些常见参数(如 :id)可能会从控制器更改为控制器。

    这都是使用 AMS ~> v0.8.0.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2016-10-03
      相关资源
      最近更新 更多