Ruby on rails ID+;Rails中URL中的Slug名称(如StackOverflow中)
我试图在Rails中实现如下URL:Ruby on rails ID+;Rails中URL中的Slug名称(如StackOverflow中),ruby-on-rails,url,slug,Ruby On Rails,Url,Slug,我试图在Rails中实现如下URL: http://localhost/posts/1234/post-slug-name 同时使用ID和slug name,而不是 http://localhost/posts/1234 或 (现在我在URL中只有slug名称,所以这部分结束了)。我该怎么做 UPD 我找到一篇关于这方面的文章:,而不是/id/slug,它建议使用/id slug,这对我来说非常合适,因此我将继续使用它。除了您的资源路由之外,您还需要添加一条常规路由(当然,假设您的帖子路由就
http://localhost/posts/1234/post-slug-name
同时使用ID和slug name,而不是
http://localhost/posts/1234
或
(现在我在URL中只有slug名称,所以这部分结束了)。我该怎么做
UPD
我找到一篇关于这方面的文章:,而不是
/id/slug
,它建议使用/id slug
,这对我来说非常合适,因此我将继续使用它。除了您的资源路由之外,您还需要添加一条常规路由(当然,假设您的帖子
路由就是这样定义的)。比如说,
map.resources :posts
map.connect '/posts/:id/*slugs', :controller => 'posts', :action => 'show'
Rails对SEO友好的URL有一些内置支持 只需覆盖模型中的to_param方法,即可以“id title”的形式创建url 这来自我的一个项目,创建了一个url,其中包含id、类别名称和型号名称:
def to_param
"#{id}-#{category.name.parameterize}-#{name.parameterize}"
end
Rails足够智能,可以在访问控制器操作时将其提取回普通id中,因此以下方法可以正常工作:
def show
@model = Model.find(params[:id])
render :action => "show"
end
使用。它有一个很好的特性:你可以更新你的url而不破坏旧的
生成视图url对我不起作用。我只是在模型中添加了一个小方法
def to_param
self.friendly_id
end
stringex gem包含ActsAsUrl,用于创建属性的URI友好表示形式
它还包含一个Unicode解码器库,可以将Unicode转换为ASCII。关于Rails 3中的slug。它提供了漂亮的URL,甚至更多,通过增加ID就可以保护您的站点不受要求信息的随机脚本的影响。此外,它还避免了在数据库中保存slug。我知道这个问题已经很老了,但我认为它仍然值得一些关注,而且没有一个答案是最新的,也没有提供一种方法来生成OP想要的内容(即
http://localhost/posts/1234/post-slug-name
)
在routes.rb中
get 'posts/:id/:slug', to: 'posts#show', as: 'slugged_post'
然后在视图中
<%= link_to slugged_post_path(post, post.name.parameterize) %>
您可能希望在模型中定义一个slug方法,以避免在视图中调用parameterize。是的,这就是我在UPD中使用的方法。实际上,我也使用了这种方法。这应该是
link\u to
调用中的slugged\u post\u path
。
<%= link_to slugged_post_path(post, post.name.parameterize) %>