我有以下datamapper模型:
class List
include DataMapper::Resource
property :id, Serial
property :author, String, :required => true,
:default => lambda { |r, p| @user_nick }
property :name, String, :required => true, :length => 1..255
property :created_at, DateTime, :default => lambda{ |r, p| Time.now }
has n, :items
end
class Item
include DataMapper::Resource
property :id, Serial
property :text, String, :required => true, :length => 1..255
belongs_to :list
end
换句话说,一个包含零个或多个项目的列表。
该名单尚未订购。我的问题是:我该如何做到这一点?我看到的两个明显的解决方案是
(a)使用Item
整数或
index
(b)使用Item
和previous
字段扩充next
,IOW实现双向链接列表。
这两种解决方案都让我觉得效率低下且容易出错(多年来我没有实施链表或遍历和修改操作,即使这样也是学校练习)。
有更好的方法吗? (我不是特别关注性能,这只是一个原型,而不是一个真正的应用程序,但我想在稳健性和性能方面获得'适当'的解决方案。如果重要的话,我正在使用Datamapper的AppEngine后端,但我想要一些在RDBMS上也能正常工作的东西。
干杯
答案 0 :(得分:0)
(a)虽然我同意手动完成时容易出错,dm-is-list会处理一些细节。在一次更新多个项目时需要仔细编码(参见:最佳方案)。
(b)虽然我无法评论它与AppEngine的关系,但RDBMS系统为您提供随机访问,因此不需要双向链表。在旁注,分类,重新排序&在RDBMS中导航双向链表吓到我了。我更喜欢我的应用程序失败而不是无限循环的可能性。