如何根据标题重写URL?

时间:2010-12-10 22:15:50

标签: ruby-on-rails url url-rewriting url-routing

这是一个相当开放的问题,我只是在寻找最好的途径。

用户可以发布带有标题的链接。我希望我的URL用于搜索引擎优化目的,以显示这些标题。我相信stackoverflow的工作原理大致相同。

所以,如果标题是“我的foobar刚刚与我的猫一起制作”

我希望网址为:www.website.com/posts/My-foobar-just-made-out-with-my-cat

有什么想法吗?

提前非常感谢!!

2 个答案:

答案 0 :(得分:2)

我在一个旧的Rails 2.x应用程序中使用它。擦洗标题可能有更好的方法......

(进入你的模特)

def to_param
  seo_uri
end

def seo_uri
  "#{self.id}-#{self.title.gsub(/[^a-z0-9]+/i, '-').gsub(/-{2}/, '-').gsub(/-$/, '')}"
end

希望这有帮助!

<强>更新

对此答案的评论表明,Rails 3用户可以使用新方法:#parameterizeRails API document for this method显示了应该如何使用(cut-n-paste):

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

@person = Person.find(1)
# => #<Person id: 1, name: "Donald E. Knuth">

<%= link_to(@person.name, person_path %>
# => <a href="/person/1-donald-e-knuth">Donald E. Knuth</a>

答案 1 :(得分:2)

有一个非常棒的插件,FriendlyId可以为你处理所有这些。大量非常聪明的功能,包括标题更改的范围和301重定向处理。这与stackoverflow和Brian的方法不同,因为id未在url中使用。