Включение вложенных объектов в ответ JSON из объектов MongoMapper

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

ОБНОВЛЕНИЕ

Пробуя предложение Скотта, я добавил в модель Store следующее:

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, а затем то же самое произойдет с каждым хешем и каждым продуктом + сервисом. Я читаю источник ActiveSupport :: JSON, и до сих пор это то, что я почерпнул из него.

Но, еще не работает ...:

Мой логический мозг на самом деле не согласен с этим. Разве одного ключа недостаточно?

Теоретический сценарий:
Если бы у меня были зашифрованные конфиденциальные данные, хранящиеся в базе данных, которые мог бы расшифровать только владелец, было бы целесообразно использовать хешированные данные пользователей пароль к ключу или вектор инициализации к его или ее данным?

Следует ли считать ключ более секретным, чем вектор инициализации, или наоборот?

18
задан rook 24 February 2011 в 18:46
поделиться