使用Ohm& amp;时,集合与集合或列表之间有什么区别? Redis的?
几个欧姆示例使用列表而不是集合(请参阅list doc itself):
class Post < Ohm::Model
list :comments, Comment
end
class Comment < Ohm::Model
end
这种设计选择的理由是什么?
答案 0 :(得分:14)
只是为了扩展Ariejan的答案。
列表 - 已订购。类似于Ruby中的Array。用于排队和保留订购的物品。
设置 - 无序列表。它的行为类似于Ruby中的数组,但针对更快的查找进行了优化。
Collection - 与 reference 一起使用,它提供了一种表示关联的简单方法。
本质上,集合和引用是处理关联的便捷方法。所以这个:
class Post < Ohm::Model
attribute :title
attribute :body
collection :comments, Comment
end
class Comment < Ohm::Model
attribute :body
reference :post, Post
end
是以下内容的快捷方式:
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
回答关于设计选择的基本原理的原始问题 - 引入了集合和引用,以提供表示关联的简单api。
答案 1 :(得分:5)
列表 - 订购列表元素。当您请求整个列表时,您可以按照将它们放入列表的方式获得订购的项目。
收集 - 元素的无序集合。当您请求收集时,项目可能以随机顺序出现(例如,无序)。**
在您的示例中,订购了评论。
**我知道随机与无序相同,但确实说明了这一点。