Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ID+;Rails中URL中的Slug名称(如StackOverflow中)_Ruby On Rails_Url_Slug - Fatal编程技术网

Ruby on rails ID+;Rails中URL中的Slug名称(如StackOverflow中)

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,这对我来说非常合适,因此我将继续使用它。除了您的资源路由之外,您还需要添加一条常规路由(当然,假设您的帖子路由就

我试图在Rails中实现如下URL:

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) %>