无论如何在rails ActiveSerializer中使用实例方法之外的`options`?

时间:2017-06-22 16:40:03

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

我有一个序列化程序,它开始使数据库查询繁重,但并不是每次调用序列化程序时都需要所有查询。我想将一个URL参数传递给序列化程序,让它知道是否需要某个关联。但是,我似乎无法找到一种方法来调用options,除非我在一个替代方法中。我是以错误的方式来做这件事的吗?基本示例:

class UserSerializer < ActiveModel::Serializer has_many :notes, serializer: UserNotesSerializer if options['include_notes'] end

编辑返回的错误是:

*** NameError Exception: undefined local variable or method `options' for UserSerializer

第二次编辑:@options由于某种原因返回nil,阻止我访问选项哈希。这是一个已知的问题吗?使用版本0.8.1

是这样的吗?

1 个答案:

答案 0 :(得分:1)

@options并不存在于班级。 Ruby首先评估序列化程序类和方法定义。然后创建一个选项哈希值,在渲染时将其传递给序列化程序类的新实例。访问这些选项的方法实际上在ActiveModel :: Serializer的更高版本中命名为instance_options

但是,你仍然可以完成你想要做的事情。最简单的方法是在渲染时使用except:选项。当您不需要关联时,您可以通过include_notes: false而不是传递except: [:notes]