如何在Datamapper中表示列表

时间:2011-03-14 12:58:59

标签: ruby google-app-engine datamapper

我有以下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)使用Itemprevious字段扩充next,IOW实现双向链接列表。

这两种解决方案都让我觉得效率低下且容易出错(多年来我没有实施链表或遍历和修改操作,即使这样也是学校练习)。

有更好的方法吗? (我不是特别关注性能,这只是一个原型,而不是一个真正的应用程序,但我想在稳健性和性能方面获得'适当'的解决方案。如果重要的话,我正在使用Datamapper的AppEngine后端,但我想要一些在RDBMS上也能正常工作的东西。

干杯

1 个答案:

答案 0 :(得分:0)

(a)虽然我同意手动完成时容易出错,dm-is-list会处理一些细节。在一次更新多个项目时需要仔细编码(参见:最佳方案)。

(b)虽然我无法评论它与AppEngine的关系,但RDBMS系统为您提供随机访问,因此不需要双向链表。在旁注,分类,重新排序&在RDBMS中导航双向链表吓到我了。我更喜欢我的应用程序失败而不是无限循环的可能性。