Question

Quelle est la différence entre une collection et un ensemble ou une liste lors de l'utilisation Ohm & Redis?

Plusieurs des exemples Ohm utilisent une liste plutôt que d'une collection (voir la liste document lui-même ):

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

class Comment < Ohm::Model
end

Quelle est la raison de ce choix de conception?

Était-ce utile?

La solution

Liste - liste ordonnée d'éléments. Lorsque vous demandez la liste complète, vous obtenez les articles commandés la façon dont vous les mettez dans la liste.

Collection - non ordonnée collection d'éléments. Lorsque vous demandez la collection, les articles peuvent apparaître dans un ordre aléatoire (par exemple non ordonnée). **

Dans votre exemple, les commentaires sont commandés.

** Je sais que aléatoire n'est pas la même chose que non ordonnée, mais elle illustre bien le point.

Autres conseils

Juste pour développer la réponse de Ariejan.

  • Liste - ordonnée. Similaire à un tableau en Ruby. Utilisé pour les files d'attente et des éléments de maintien commandés.

  • Set - une liste non ordonnée. Il se comporte similaire à un tableau en Ruby, mais est optimisé pour des recherches plus rapides.

  • Collection -. Utilisée conjointement avec référence , il fournit un moyen simple de représenter les associations

En substance, les collections et les références sont des méthodes pratiques pour faire face à des associations. Donc ceci:

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

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

est un raccourci pour ce qui suit:

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

Pour vous répondre à la question initiale sur la raison du choix de conception -. Collections et références ont été introduites pour fournir une API simple pour représenter les associations

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