在 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
。
我有一个序列化程序开始对数据库进行大量查询,但并非每次调用序列化程序时都需要所有查询。我想将 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
。