class Api::StoresController < ApplicationController
respond_to :json
def index
@stores = Store.all(:include => :products)
respond_with @stores
end
end
Retouren nur Geschäfte ohne ihre Produkte, wie auch
Store.find(:all).to_json(:include => :products)
Die Assoziation ist getestet, ich kann die verschachtelten Produkte in der Konsolenausgabe von z. B. sehen,
Store.first.products
Was ist der richtige Weg, um diese Produkte in MongoMapper einzubinden?
Hier sind meine Modelle:
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
UPDATE
Ich habe Scotts Vorschlag ausprobiert und dem Store-Modell Folgendes hinzugefügt:
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
Und im Controller:
def index
@stores = Store.all_including_nested
respond_with @stores
end
Welche siehe wie es funktionieren sollte? Angenommen, das Array von Hashes würde #to_json auf sie aufgerufen haben, und dann das gleiche würde passieren, um jeden Hash und jedes Produkt + Service. Ich lese durch ActiveSupport::JSON's Quelle, und so weit, dass ist, was ich von ihm grokked haben.
Aber es funktioniert noch nicht... :(