在 rails ActiveSerializer 中,是否可以在实例方法之外使用 `options`?

Is there anyway to use `options` outside of an instance method in rails ActiveSerializer?

我有一个序列化程序开始对数据库进行大量查询,但并非每次调用序列化程序时都需要所有查询。我想将 URL 参数传递给序列化程序,让它知道是否需要某个关联。但是,除非我在 instead 方法中,否则我似乎找不到调用 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

这样的事情可能吗?

@options 在 class 级不存在。 Ruby 首先评估您的序列化程序 class 和方法定义。然后创建一个选项散列,在渲染时将其传递到序列化程序 class 的新实例中。访问这些选项的方法实际上在ActiveModel::Serializer.

的更高版本中被命名为instance_options

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