这可能听起来像一个微不足道的问题,但对于面向消费者的应用程序来说这是非常重要的
什么是最简单的方法和最可扩展的方式将可怕的mongo id映射到一个友好的id?
xx.com/posts/4d371056183b5e09b20001f9
至
xx.com/posts/a
中号
小智 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"
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢这种方式,请检查此gem:https://github.com/hakanensari/mongoid-slug
Chr*_*ald 21
在您的集合上定义友好的唯一字段(如slug),将其编入索引,在模型上定义to_param以返回它:
def to_param
slug
end
Run Code Online (Sandbox Code Playgroud)
然后在你的发现者中,通过slug而不是ID找到:
@post = Post.where(:slug => params[:id].to_s).first
Run Code Online (Sandbox Code Playgroud)
这将让你将slug视为资源互动目的的有效PK,并且它们更漂亮.
不幸的是,关键宏已从mongo中删除.对于自定义ID,用户现在必须覆盖_id字段.
class Band
include Mongoid::Document
field :_id, type: String, default: ->{ name }
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7553 次 |
| 最近记录: |