在rails中,我们默认的URLs在routes.rb中的定义是这样的
map.connect ':controller/:action/:id'
这为我们生成/contrller_name/action_name/id 这个样式的URLs
而我们可以编写to_params方法来定义一个比较友好的url:
def to_params
"#{id}-#{title}"
end
当to_i被调用后,"123-hello-world"会转换成为123
>> "123-hello-world-1".to_i
=> 123
但to_params的使用,比较的单一,考虑下面的这种方式:
def to_params
"#{title}"
end
结果是无法运行。
现在,friendly_id插件提供了这样的一个功能,它可以让你构建非常友好的URLs
Homepage: http://github.com/norman/friendly_id
建立测试项目:
>>rails friendly_id
>>cd friendly_id
>>rake db:create
>>ruby script/generate post title:string content:text
>>rake db:migrate
安装:
1. gem install friendly_id
2. script/generate friendly_id
3. rake db:migrate
使用:
1. 在environment.rb的Rails::Initializer.run do |config|中添加:
config.gem "friendly_id"
2. 在Model中增加:
has_friendly_id :title, :use_slug => true
下面,我们就可以使用http://127.0.0.1:3000/posts/first这样的URL了。
其实现原理,只要看一下生成的表,我想,大家就知道了:
[img]http://dl.iteye.com/upload/attachment/154465/01b6e9d0-7463-38a0-a59d-bb22cdc261c6.jpg[/img]
那如果post的title不唯一呢?怎么办?借XXX书里的说法,自己试一下,就知道啦。
map.connect ':controller/:action/:id'
这为我们生成/contrller_name/action_name/id 这个样式的URLs
而我们可以编写to_params方法来定义一个比较友好的url:
def to_params
"#{id}-#{title}"
end
当to_i被调用后,"123-hello-world"会转换成为123
>> "123-hello-world-1".to_i
=> 123
但to_params的使用,比较的单一,考虑下面的这种方式:
def to_params
"#{title}"
end
结果是无法运行。
现在,friendly_id插件提供了这样的一个功能,它可以让你构建非常友好的URLs
Homepage: http://github.com/norman/friendly_id
建立测试项目:
>>rails friendly_id
>>cd friendly_id
>>rake db:create
>>ruby script/generate post title:string content:text
>>rake db:migrate
安装:
1. gem install friendly_id
2. script/generate friendly_id
3. rake db:migrate
使用:
1. 在environment.rb的Rails::Initializer.run do |config|中添加:
config.gem "friendly_id"
2. 在Model中增加:
has_friendly_id :title, :use_slug => true
下面,我们就可以使用http://127.0.0.1:3000/posts/first这样的URL了。
其实现原理,只要看一下生成的表,我想,大家就知道了:
[img]http://dl.iteye.com/upload/attachment/154465/01b6e9d0-7463-38a0-a59d-bb22cdc261c6.jpg[/img]
那如果post的title不唯一呢?怎么办?借XXX书里的说法,自己试一下,就知道啦。