class Api::StoresController < ApplicationController
respond_to :json
def index
@stores = Store.all(:include => :products)
respond_with @stores
end
end
Devoluciones sólo almacena sin sus productos, al igual queInclusión de objetos anidados en respuesta JSON, desde MongoMapper objetos
Store.find(:all).to_json(:include => :products)
se prueba la asociación, puedo ver los productos anidados en ouput consola de, digamos,
Store.first.products
¿Cuál es la forma correcta de obtener productos incluidos con MongoMapper?
Éstos son mis modelos:
class Store
include MongoMapper::Document
many :products, :foreign_key => :store_ids
end
class Product
include MongoMapper::Document
key :store_ids, Array, :typecast => 'ObjectId'
many :stores, :in => :store_ids
end
ACTUALIZACIÓN
Al tratar la sugerencia de Scott, he añadido lo siguiente para el modelo de la tienda:
def self.all_including_nested
stores = []
Store.all.each do |store|
stores << store.to_hash
end
end
def to_hash
keys = self.key_names
hash = {}
keys.each{|k| hash[k] = self[k]}
hash[:products] = self.products
hash[:services] = self.services
hash
end
Y en el controlador :
def index
@stores = Store.all_including_nested
respond_with @stores
end
¿Cuál parece como debería funcionar? Suponiendo que la matriz de valores hash hubiera llamado a #to_json, y luego sucedería lo mismo con cada hash y cada Producto + Servicio. Estoy leyendo el origen de ActiveSupport :: JSON, y hasta ahora eso es lo que he deducido de él.
Pero, sin embargo, no funciona ... :(
en el borde del tiempo, acababa de figurar lo mismo y iba a actualizar la pregunta con ella;) respuesta muy apreciada, gracias – oliverbarnes