ruby on rails-mongoid有没有办法使用integer(number)作为默认id,而不是长散列值



我只想拥有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

最新更新