ruby-on-rails - query - rails postgresql
Rails Relaciones de objetos y representación JSON (2)
Por defecto, solo obtendrá el JSON que representa el modelb
en su ejemplo anterior. Pero, puedes decirle a Rails que incluya también otros objetos relacionados:
def export
@export_data = ModelA.find(params[:id])
respond_to do |format|
format.html
format.json { render :json => @export_data.to_json(:include => :modelb) }
end
end
Incluso puede indicarle que excluya ciertos campos si no desea verlos en la exportación:
render :json => @export_data.to_json(:include => { :modelb => { :except => [:created_at, updated_at]}})
O bien, incluya solo ciertos campos:
render :json => @export_data.to_json(:include => { :modelb => { :only => :name }})
Y puede anidarlos tan profundamente como necesite (digamos que el Modelo B también tiene_muy ModeloC):
render :json => @export_data.to_json(:include => { :modelb => { :include => :modelc }})
Si desea incluir varias asociaciones de modelos secundarios, puede hacer lo siguiente:
render :json => @export_data.to_json(include: [:modelA, :modelB, :modelN...])
Descargo de responsabilidad, sé muy poco sobre Rails. Trataré de ser conciso. Dadas las siguientes relaciones modelo en Rails:
class ModelA < ActiveRecord::Base
belongs_to :ModelB
...
class ModelB < ActiveRecord::Base
has_many :ModelA
Al invocar la acción show del controlador ModelA, el JSON devuelto debe mostrar todos los ObjectAs que son hijos del ObjectB del cual el ObjectA en cuestión es hijo.
Entonces, si tengo un ObjectB que contiene ObjectA''s de ID 1, 2 y 3 y luego acceso a /modela/1.json
Debería ver:
{
"modelb": {
"id": "1",
"modela": [insert the ModelA JSON for ID''s 1, 2 and 3]
}
}
Si desea un enfoque más flexible para renderizar json, puede considerar usar el jbuilder de gemas: https://github.com/rails/jbuilder
Le permite representar atributos personalizados, variables de instancia, asociaciones, reutilizar json parciales de una manera conveniente.