Question

J'ai un projet que je l'ai utilisé Active Record et que je voudrais ajouter quelques nouvelles fonctionnalités en utilisant MongoDB. Plutôt que de réinventer la roue et ré-écrire tout mon site, comment puis-je intégrer 2 modèles ensemble, un qui utilisent MongoMapper et les autres ActiveRecord (postgres).

J'ai trouvé que d'autres l'ont fait avec succès, mais pas d'exemples:

http: // groupes .google.com / groupe / mongomapper / browse_thread / fil / ec5ad00e18e7dd2c / 887b8b0b904a8f73? LNK = gst & q = activerecord # 887b8b0b904a8f73

Par exemple, j'ai un modèle STI Mongo (s) des lieux que je veux rapporter à un modèle existant ActiveRecord des emplacements ... à savoir les villes. et un modèle utilisateur basé sur Authlogic ... Comment puis-je les utiliser en concert? Je serais reconnaissant pour un pointeur ou deux dans la bonne direction.

Merci,

Était-ce utile?

La solution

a fonctionné à merveille

endroits modèle

  key :location_id, Integer, :required => true

    def location
        Location.find(location_id)
    end

modèle emplacements

  def self.find_places(id)
    Property.find_by_location_id(id)
  end

  def find_places
    Property.find_by_location_id(id)
  end

Autres conseils

Vous pouvez également utiliser transtypage.

Au lieu de stocker les location_id dans MongoDB, vous pouvez mettre en œuvre des méthodes de classe, from_mongo et to_mongo, dans la classe d'emplacement pour permettre mongomapper sérialiser chaque instance d'emplacement dans une mongo manière sûre et conviviale.

Exemple simple (ISTC):

modèle Places

key :location, Location, :required => true

modèle Emplacement

def self.to_mongo(location)
  location[:id]
end

def self.from_mongo(location_id)
  find(location_id)
end

Ceci, bien sûr, est exactement le même exemple que dans la réponse précédente. La chose est cool ici que vous pouvez sérialiser une chaîne complète, avec plus de données en cas de besoin, rendant ainsi plus facile de rechercher et de récupérer des données à partir mongo.

Par exemple, le location_id et les coordonnées, vous pouvez imiter un GeoDB et map / reduce pour des places dans la même latitude. (Exemple stupide, je sais)

Référence: Plus mongomapper Awesomenes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top