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)