Sto costruendo un'API utilizzando ActiveModel :: Serializzatori. Qual è il modo migliore per caricare i dati in modo condizionale usando i parametri?Sideloading condizionale con ActiveModel :: Serializzatori
Così posso fare richieste come GET /api/customers
:
"customers": {
"first_name": "Bill",
"last_name": "Gates"
}
E GET /api/customers?embed=address,note
"customers": {
"first_name": "Bill",
"last_name": "Gates"
},
"address: {
"street": "abc"
},
"note": {
"body": "Banned"
}
Qualcosa del genere a seconda delle params. So che ActiveModel :: Serializer ha la sintassi include_[ASSOCIATION]?
ma come posso usarlo in modo efficiente dai miei controller?
Questa è la mia soluzione attuale, ma non è pulito:
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
Deve essere un modo più semplice?
Mi piacciono i tuoi suggerimenti utilizzando view_context. È possibile testare l'unità con rspec? – Richard
Ho aggiornato la mia domanda per mostrarvi come l'ho fatto. – Richard
Risposta brillante, grazie @lou. Molto elegante. – tristanm