在回报率SEO友好的URL(SEO friendly URLs in RoR)

2019-07-20 13:32发布

比方说,我有编辑的音乐专辑相对基本的CRUD应用。 在数据库中,我有:

id | album_name | artist  |  navigation

1    Lets Talk   Lagwagon    lets-talk

然而,不是albums/1回我的Show页面,我想在页面由可访问albums/lets-talk路线。

所以在我的控制,我有:

  def show
    @album = Album.find_by_navigation(params[:id])
  end

而在我的索引视图我有:

<%= link_to 'Show', :controller => "albums", :action => "show", :id => album.navigation %>

这成功地执行其功能,但是,Ruby的API说我的link_to方法是不上市的替代旧的陈旧,所以我怀疑我会对此错误的方式。

Answer 1:

退房friendly_id宝石。 这正是你所需要的。



Answer 2:

在模型中定义的to_param:

class album
    def to_param
        "#{id}-#{album-name.parameterize}"
     end
end

现在你可以使用

<%= link_to album.album_name, album %>

创建链接到搜索引擎优化的路径

然后在你的控制器:

Album.find(params[:id])

将调用to_i - >让您得到Topic.find(2133)或什么的。

这将导致形式的URL:“/专辑/ 2暗侧的最-月亮”,这虽然不是什么被要求具有的优势 - 该ID用于查找专辑 - 这是唯一的,当名称可能不是。

该参数化方法“替换特殊字符的字符串,以便它可以作为一个‘漂亮’的网址的一部分” - http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize



Answer 3:

如果你想在浏览器中显示的URL为app/albums/lets-talk ,但post数据为album_id => 1 ,购物车等除

在您的相册样板:

# PRODUCT MODEL
 before_create do
   self.navigation = album_name.downcase.gsub(" ", "-")  
  end

def to_param
    [id, album_name.parameterize].join("-")
end

现在你可以

@album = Album.find_by_navigation(params[:id])

album = Album.find(params[:album_id])


Answer 4:

好像你whant覆盖:ID参数:名称参数。 这种情况在描述这篇文章 。

class User < ActiveRecord::Base
  def to_param  # overridden
    name
  end
end

user = User.find_by_name('Phusion')
link_to 'Show', user_path(user)  # => <a href="/users/Phusion">Show</a>


文章来源: SEO friendly URLs in RoR