Frage

Was ist der Unterschied zwischen einer Sammlung und einem Satz oder einer Liste bei der Verwendung von Ohm & Redis?

Einige der Ohm -Beispiele verwenden eine Liste und nicht eine Sammlung (siehe die Listen Sie doc selbst auf):

class Post < Ohm::Model
  list :comments, Comment
end

class Comment < Ohm::Model
end

Was ist die Begründung für diese Designauswahl?

War es hilfreich?

Lösung

Liste - bestellt aufführen von Elementen. Wenn Sie die gesamte Liste anfordern, erhalten Sie die Art und Weise, wie Sie sie in die Liste einfügen.

Sammlung - ungeordnet Sammlung von Elementen. Wenn Sie die Sammlung anfordern, können Elemente in zufälliger Reihenfolge angezeigt werden (z. B. ungeordnet). **

In Ihrem Beispiel werden Kommentare bestellt.

** Ich weiß, dass zufällig nicht dasselbe ist wie ungeordnet, aber es zeigt den Punkt.

Andere Tipps

Nur um Ariejans Antwort zu erweitern.

  • Liste - bestellt. Ähnlich wie ein Array in Ruby. Wird für Warteschlangen verwendet und Artikel bestellt.

  • SET - Eine ungeordnete Liste. Es verhält Ähnlich wie bei einem Array in Ruby, ist aber für schnellere Suchfrequenzen optimiert.

  • Sammlung - verwendet in Verbindung mit Hinweis, Es bietet eine einfache Möglichkeit, Assoziationen darzustellen.

Sammlungen und Referenzen sind im Wesentlichen Komfortmethoden für den Umgang mit Assoziationen. Also das:

class Post < Ohm::Model
  attribute :title
  attribute :body
  collection :comments, Comment
end

class Comment < Ohm::Model
  attribute :body
  reference :post, Post
end

ist eine Abkürzung für Folgendes:

class Post < Ohm::Model
  attribute :title
  attribute :body

  def comments
    Comment.find(:post_id => self.id)
  end
end

class Comment < Ohm::Model
  attribute :body
  attribute :post_id
  index :post_id

  def post=(post)
    self.post_id = post.id
  end

  def post
    Post[post_id]
  end
end

Um Ihre ursprüngliche Frage zur Begründung für die Designauswahl zu beantworten - wurden Sammlungen und Referenzen eingeführt, um eine einfache API für die Darstellung von Assoziationen bereitzustellen.

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