Ruby on rails Rails—如何将生成的URL修复为友好URL
我有看起来像Ruby on rails Rails—如何将生成的URL修复为友好URL,ruby-on-rails,friendly-url,Ruby On Rails,Friendly Url,我有看起来像 search.rb: id eg: 101 name eg: San Francisco cars.rb id name 搜索控制器将用户重定向到汽车 search_controller.rb if search.search_type=='cars' redirect_to :controller=>'cars', :action=>'index', :id=>search end 一个查询旧金山汽车列表的查询看起来像: http://
search.rb:
id eg: 101
name eg: San Francisco
cars.rb
id
name
搜索控制器将用户重定向到汽车
search_controller.rb
if search.search_type=='cars'
redirect_to :controller=>'cars', :action=>'index', :id=>search
end
一个查询旧金山汽车列表的查询看起来像:
http://localhost/cars?id=101
我在search.rb中重写了_param方法,如下所示:
search.rb
def to_param
normalized_name = name.gsub(' ', '-').gsub(/[^a-zA-Z0-9\_\-\.]/, '')
"#{self.id}-#{normalized_name}"
end
这在某种程度上起作用:
它生成的URL如下所示:
http://localhost/cars?id=101-San-Francisco
但是,我想生成一个如下所示的URL
http://localhost/cars/San-Francisco
我该怎么做呢?
我修路线吗
谢谢你的帮助。如果你没有做好准备,这可能会很棘手。正如您所确定的,控制模型如何显示在参数中的方法非常简单,但这只是其中的一半。稍后您必须检索它,因此您需要为此进行设置:
class Search < ActiveRecord::Base
before_save :assign_slug
def self.from_param(id)
self.find_by_slug(id)
end
def to_param
self.slug
end
protected
def assign_slug
self.slug = self.name.gsub(' ', '-').gsub(/[^\w\-\.]/, '')
end
end
请注意,应尽可能使用路由路径生成器方法,因为多个路由可能匹配相同的参数。例如:
redirect_to cars_search_path(:search => search)
redirect_to cars_search_path(:search => search)