class Api::StoresController < ApplicationController
respond_to :json
def index
@stores = Store.all(:include => :products)
respond_with @stores
end
end
商品のない店舗のみを返品します。
Store.find(:all).to_json(:include => :products)
関連付けがテストされています。たとえば、コンソール出力でネストされた製品を確認できます。
Store.first.products
それらの製品をMongoMapperに含める正しい方法は何ですか?
これが私のモデルです:
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
アップデート
スコットの提案を試す際に、ストアモデルに次のものを追加しました。
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
そしてコントローラーで:
def index
@stores = Store.all_including_nested
respond_with @stores
end
どちらが機能するように見えますか?ハッシュの配列に#to_jsonが呼び出されると仮定すると、各ハッシュと各Product+Serviceにも同じことが起こります。私はActiveSupport::JSONのソースを読んでいますが、これまでのところ、それを利用しています。
しかし、まだ機能していません... :(