Mongo ID导致可怕的URL

时间:2011-01-20 07:20:12

标签: mongodb mongoid

这可能听起来像是一个微不足道的问题,但对于面向消费者的应用来说这是非常重要的

将可怕的mongo id映射到友好ID的最简单方法和最具扩展性的方法是什么?

  

xx.com/posts/4d371056183b5e09b20001f9

     

     

xx.com/posts/a

M

4 个答案:

答案 0 :(得分:27)

您可以在mongoid中创建一个复合键,以使用键宏替换默认ID:

class Person
  include Mongoid::Document
  field :first_name
  field :last_name
  key :first_name, :last_name
end

person = Person.new(:first_name => "Syd", :last_name => "Vicious")
person.id # returns "syd-vicious"

如果您不喜欢这种方式,请检查此gem:https://github.com/hakanensari/mongoid-slug

答案 1 :(得分:21)

在您的收藏中定义一个友好的唯一字段(如slug),将其编入索引,在模型上定义to_param以返回它:

def to_param
  slug
end

然后在你的发现者中,通过slug而不是ID来找到:

@post = Post.where(:slug => params[:id].to_s).first

这样可以让slu for作为有效的PK用于资源互动,而且它们更漂亮。

答案 2 :(得分:8)

不幸的是,密钥宏已从mongo中删除。对于自定义ID, 用户现在必须覆盖_id字段。

class Band
  include Mongoid::Document
  field :_id, type: String, default: ->{ name }
end

答案 3 :(得分:4)

这是我用来成功回答这个问题的一个伟大的宝石:Mongoid-Slug

https://github.com/digitalplaywright/mongoid-slug

它提供了一个很好的界面,可以在多个模型中添加此功能。如果您愿意自己动手​​,至少可以查看一下这些想法。如果您要走这条路线,请查看Stringex gem,https://github.com/rsl/stringex和acts_as_url库。这将有助于你获得漂亮的破折号之间的网站。