我只想拥有ActiveRecord的默认特性,它使用增量整数作为id来减少url的长度。
例如,创建的第一篇文章将具有类似于"app.com/articles/1"的url,这在ActiveRecord中是默认的。
mongoid中有支持这一点的宝石吗?
您总是可以生成更短、唯一的令牌来识别您的每个记录(作为敲击的替代方案),因为您的目标只是减少URL的长度。
我最近(今天)写了一个gem-mogoid_token,它应该可以省去为mongoid文档创建唯一令牌的任何艰苦工作。它不会按顺序生成它们,但它应该能帮助你解决问题(我希望!)。
您可以尝试以下操作:
class Article
include Mongoid::Document
identity :type => Integer
before_create :assign_id
def to_param
id.to_s
end
private
def assign_id
self.id = Sequence.generate_id(:article)
end
end
class Sequence
include Mongoid::Document
field :object
field :last_id, type => Integer
def self.generate_id(object)
@seq=where(:object => object).first || create(:object => object)
@seq.inc(:last_id,1)
end
end
我并没有尝试过这种方法(将其与内部id一起使用),但我确信它应该有效。在这里查看我的申请:https://github.com/daekrist/Mongologue我在我的帖子和评论模型中添加了名为pid的"可见"id。此外,我正在使用文本id标记模型。
AFAIK这在设计上是不可能的:http://groups.google.com/group/mongoid/browse_thread/thread/b4edab1801ac75be
因此,社区采取的方法是使用蛞蝓:https://github.com/crowdint/slugoid