2011-01-24 10 views

Respuesta

5

Lista lista de elementos. Cuando solicita la lista completa, obtiene los artículos ordenados de la manera en que los coloca en la lista.

Colección - desordenada colección de elementos. Cuando solicite la recopilación, los elementos pueden aparecer en orden aleatorio (por ejemplo, no ordenados). **

En su ejemplo, los comentarios están ordenados.

** Sé que al azar no es lo mismo que desordenado, pero ilustra el punto.

+0

¿Qué hay de Set? –

14

Solo para ampliar la respuesta de Ariejan.

  • Lista ordenados. Similar a una matriz en Ruby. Se utiliza para hacer colas y mantener los artículos ordenados.

  • Conjunto - una lista desordenada. Es se comporta similar a una matriz en Ruby, pero está optimizado para búsquedas más rápidas.

  • Colección - utilizado junto con referencia, proporciona una manera simple de representar asociaciones.

En esencia, las colecciones y las referencias son métodos de conveniencia para tratar con asociaciones. Así que esto:

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

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

es un atajo para la siguiente:

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 

Para responder a la pregunta inicial acerca de la justificación de la elección del diseño - se introdujeron colecciones y referencias para proporcionar una API simple para la representación de las asociaciones .