Frage

Ich versuche, meine erste Anwendung mit mongodb on Rails mongo_mapper mit und ich bin mit einem Gewicht von meinen Optionen auf einem STI-Modell wie unten.

Es funktioniert gut, und ich werde dies natürlich in vielerlei Hinsicht hinzuzufügen, als ich zur Zeit zählen kann, ich nur neugierig, ob ich mit eingebetteten Dokumenten oder so nicht besser dran.

würde ich meine Modelle zu teilen möchten so viel wie möglich, IE, da sie alle erben bestimmte Attribute, eine gemeinsame Form teilweise auf dem Gelände / _form.html.erb ... zusätzlich zu ihren eigenen einzigartigen Formelemente usw. I wissen die Ansichten unterscheiden, aber ich bin mir nicht sicher auf den Controllern noch, wie ich Controller verwenden Eigenschaft könnte ich für die meisten Dinge übernehmen? Und ich bin sicher, dass es komplexer werden, wie ich mitgehen.

Alle Hinweise Ressourcen und / oder Weisheit (Schmerzspitzen Einsparung) geschätzt sehr

property.rb

class Property
      include MongoMapper::Document

      key :name, String, :required => true
      key :_type, String, :required => true
      key :location_id, Integer, :required => true
      key :description, String
      key :phone, String
      key :address, String
      key :url, String
      key :lat, Numeric
      key :lng, Numeric
      key :user_id, Integer, :required => true
      timestamps!

    end

Restaurant

class Restaurant < Property
  key :cuisine_types, Array, :required => true

end

bar

class Bar < Property
  key :beers_on_tap, Array

end
War es hilfreich?

Lösung

Do von mehr Modelle keine Angst, die Idee der OO ist in der Lage sein, Ihre Bedenken in kleine Stücke zu zerschneiden und dann jeder von ihnen in der Art und Weise behandeln sie müssen behandelt werden.

Zum Beispiel, Ihre Immobilie Modell scheint eine ganze Menge zu tun. Warum aufzuschlüsseln nicht die geo Sachen du hast los in eine EmbeddedDocument (lat, lng, Adresse, etc.)? Auf diese Weise Ihren Code bleiben wird einfacher und besser lesbar.

Ich benutze diese Art von STI mich und ich finde es meinen Code viel einfacher und nutzbar macht. Eine der Schönheiten von einer DB wie Mongo ist, dass Sie sehr komplexe STI wie dies tun können und immer noch eine überschaubare Sammlung von Daten haben.

In Bezug auf Ihre cuisine_types und beers_on_tap etc, ich denke, das sind feine Konzepte. Es könnte nützlich sein, zu Küche und Bier Modelle zu haben, so dass Ihre Datenbank normalisiert (ein Konzept, das leicht in Mongo zu verlieren ist) bleibt. z.

class Bar < Property
  key :beer_ids, Array
  many :beers, :in => :beer_ids
end
class Beer
  include MongoMapper:Document
  key :name, String
end

Andere Tipps

Haben Sie beiden Restaurants und Bars in der gleichen Abfrage zurückzukehren erwarten?

Wenn nicht, möchten Sie vielleicht zu überdenken, um sie von einem Basistyp abgeleitet werden müssen.

In der Standardeinstellung ist Mongo_Mapper gehe beiden Restaurants und Bars in einer einzigen Sammlung setzen. Dies könnte die Leistung und die Dinge schwieriger maßstabs in Zukunft behindern.

Beim Blick durch einige der Mongo_Mapper Code, sieht es aus wie Sie dies mit set_collection_name on the fly setzen möglicherweise in der Lage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top