ActiveModel :: Serializersを使用してAPIを構築しています。 paramsを使用して条件付きでデータをサイドロードする最善の方法は何ですか?ActiveModel ::シリアライザで条件付きでサイドローディング
だから私はGET /api/customers
のような要求を行うことができますのparamsに応じて、そのような
"customers": {
"first_name": "Bill",
"last_name": "Gates"
}
そして
"customers": {
"first_name": "Bill",
"last_name": "Gates"
},
"address: {
"street": "abc"
},
"note": {
"body": "Banned"
}
GET /api/customers?embed=address,note
何かを。 ActiveModel :: Serializersにはinclude_[ASSOCIATION]?
という構文がありますが、どうすればそれを私のコントローラから効率的に使うことができますか?
これは私の現在のソリューションですが、それはきちんとしていないのです。
customer_serializer.rb:
def include_address?
!options[:embed].nil? && options[:embed].include?(:address)
end
application_controller.rb:
def embed_resources(resources = [])
params[:embed].split(',').map { |x| resources << x.to_sym } if params[:embed]
resources
end
customers_controller.rb:
def show
respond_with @customer, embed: embed_resources
end
はもっと簡単な方法でなければなりませんか?
私はあなたの提案がview_contextを使って好きです。これをrspecで単体テストすることは可能ですか? – Richard
私は自分のやり方を示すために質問を更新しました。 – Richard
鮮やかな答え、ありがとう@lou。非常にエレガント。 – tristanm