如何根据标题重写URL?

问题描述:

这是一个相当开放的问题,我只是寻找最好的途径。如何根据标题重写URL?

用户可以发布带标题的链接。而且我希望我的URL用于搜索引擎优化目的来显示这些标题。大致相同的方式,我相信*的作品。

因此,如果标题是“我的foobar的只是做了我的猫”

我想的网址是:www.website.com/posts/My-foobar-just-made-out-with-my-cat

任何想法?

非常感谢!

+0

问题是什么? – deamon 2010-12-10 22:21:25

我在旧的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 

希望这有助于!

UPDATE

对这个答案的评论表示没有可用于Rails 3个的用户的新方法:#parameterize。该Rails API document for this method表明它应该如何使用(切正贴):

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> 
+0

这是非常聪明的布赖恩!那么如何重写标准的URL呢? – Trip 2010-12-10 23:44:17

+2

不参数化()做到这一点? – 2010-12-10 23:46:03

+0

@保罗 - 直到你提到它才知道这个新的变化!感谢您的领导!我正在更新我的答案,以包括Rails 3用户... – Brian 2010-12-10 23:52:25

有一个真正真棒插件,FriendlyId将处理这一切为您服务。有很多非常聪明的功能,包括范围和处理301重定向标题更改。这不同于*和Brian的方法,因为id不在url中使用。