2016-11-23 9 views
0

アクティブモデルシリアライザ0.10クラスの値を削除し、私はfolowing ASM 0.10持た:はどのように任意に含ま/

class UserMicroSerializer < ActiveModel::Serializer 
    attributes :id, :name, :is_friend 


    def is_friend 
    @instance_options[:is_friend] 
    end 
end 

をもis_friend属性を持っていないサポートしたいと思います。

NoMethodError: undefined method `[]' for nil:NilClass 

どのように私は@instane_optionsは条件付きでis_friendを含めるなるだろう:

class UserMicroSerializer < ActiveModel::Serializer 
    attributes :id, :name 
    if @instance_options[:is_friend] 
    attributes :is_friend 
    end 


    def is_friend 
    @instance_options[:is_friend] 
    end 
end 

が、取得エラーメッセージ:

は、私のようないろいろなことを試してみましたか?

+0

コントローラで別のシリアライザを条件付きで使用してもよいですか? – Swards

答えて

2

あなたは条件付きコントローラで異なるシリアライザを使用することができるなら、あなたは、単純なシリアライザをサブクラス化することにより、この

class SimpleUserMicroSerializer < ActiveModel::Serializer 
    attributes :id, :name 
end 

を行うことができるかもしれません、あなたは多くのコードの重複を持っていない

class UserMicroSerializer < SimpleUserMicroSerializer 
    attributes :is_friend 

    def is_friend 
    @instance_options[:is_friend] 
    end 

end 
+0

私はそれがおそらく最も簡単なことだと思う、thx – timpone

0

コントローラから{scope: 'is_friend'}を送信してシリアライザにチェックインすることもできます。

class UserMicroSerializer < ActiveModel::Serializer 
attributes :id, :name, :is_friend 

    def filter(keys) 
    keys.delete :is_friend if scope and scope[:is_friend] 
    super(keys) 
    end 
end 
関連する問題