1

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

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

4

1 回答 1

1

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

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

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

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

在我的序列化程序中,我可以访问scope.current_resource_ownerand scope.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。

于 2014-05-02T22:11:00.627 回答