访问ActiveModel序列化程序中的参数

时间:2014-04-26 20:31:09

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

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

基本上我只是访问params散列内的时区来响应转换到该时区的模型的时间属性。

1 个答案:

答案 0 :(得分:1)

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

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)

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

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