Nic*_*own 4 ruby seo routing ruby-on-rails
假设我有一个相对基本的CRUD应用程序来编辑音乐专辑.在数据库中我有:
id | album_name | artist | navigation
1 Lets Talk Lagwagon lets-talk
Run Code Online (Sandbox Code Playgroud)
但是,我希望路由无法访问页面,而不是albums/1返回Show页面albums/lets-talk.
所以在我的控制器中我有:
def show
@album = Album.find_by_navigation(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
在我的索引视图中,我有:
<%= link_to 'Show', :controller => "albums", :action => "show", :id => album.navigation %>
Run Code Online (Sandbox Code Playgroud)
这成功地执行了它的功能,但是,Ruby API说我的link_to方法陈旧且陈旧而没有列出替代方案,所以我怀疑我的方法是错误的.
Wil*_*ill 17
在模型中定义to_param:
class album
def to_param
"#{id}-#{album-name.parameterize}"
end
end
Run Code Online (Sandbox Code Playgroud)
现在你可以使用了
<%= link_to album.album_name, album %>
Run Code Online (Sandbox Code Playgroud)
创建指向seo路径的链接
然后在你的控制器中:
Album.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
会打电话to_i- >所以你得到了Topic.find(2133)或者其他什么.
这将形成以下形式的网址:"/ album/2-dark-side-of-the-moon"虽然不完全符合要求但具有优势 - 该id用于查找专辑 - 这是唯一的,当这个名字可能不是.
参数化方法"替换字符串中的特殊字符,以便它可以用作'漂亮'URL的一部分" - http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize
看看friendly_id gem.这正是你所需要的.