2017-06-22 3 views
0

データベースクエリを重くするシリアライザがありますが、シリアライザが呼び出されるたびにすべてのクエリが必要というわけではありません。特定の関連付けが必要かどうかを知るために、シリアライザにURLパラメータを渡したいと思います。しかし、私は代わりの方法の中にいない限り、optionsに電話する方法を見つけることができないようです。私はこれについて間違った方法をとっていますか?基本例:rails ActiveSerializerのインスタンスメソッドの外に `options`を使用する方法はありますか?

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

EDIT返されるエラーは次のとおりです。

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

第二編集:@optionsは、何らかの理由でnilを返すオプションのハッシュにアクセスするから私を妨げています。これは既知の問題ですか?バージョン0.8.1を使用して

これは可能ですか?

+0

'@options [:include_notes]'を試してください – Pavan

答えて

1

@optionsクラスレベルには存在しません。 Rubyはまずシリアライザのクラスとメソッド定義を評価します。次に、レンダリング時にシリアライザクラスの新しいインスタンスに渡されるオプションハッシュを作成します。これらのオプションにアクセスする方法は、ActiveModel :: Serializerのそれ以降のバージョンでは実際にinstance_optionsという名前です。

しかし、あなたはまだ何をしようとしていることができます。最も直接的な方法は、レンダリング時にexcept:オプションを使用することです。 include_notes: falseを渡す代わりに、関連が必要ない場合はexcept: [:notes]を渡すことができます。

関連する問題