Rails - 如何将生成的 URL 修复为友好的 URL
Posted
技术标签:
【中文标题】Rails - 如何将生成的 URL 修复为友好的 URL【英文标题】:Rails - How to fix the generated URL to be a friendly URL 【发布时间】:2011-08-14 06:33:39 【问题描述】:我的模型看起来像
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 中覆盖了 to_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
我该怎么做呢? 我要修路线吗?
感谢您的帮助。
【问题讨论】:
【参考方案1】:如果您没有做好准备,这可能会很棘手。正如您所确定的,控制模型如何在参数中显示的方法非常简单,但这只是其中的一半。稍后您必须检索它,因此您需要为此进行设置:
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
这需要在您的搜索模型中添加一个slug
列,以便可以通过它查找搜索。添加索引(可能是唯一的索引)可能是个好主意,以帮助以后以有效的方式检索这些。
在您的控制器中,您不使用 find
而是使用 from_param
来进行检索。
您还需要添加一个采用此参数的自定义路由:
match '/cars/:search', :to => 'cars#index', :as => 'cars_search'
请注意,您应该尽可能使用路由路径生成器方法,因为多个路由可能匹配相同的参数。例如:
redirect_to cars_search_path(:search => search)
【讨论】:
以上是关于Rails - 如何将生成的 URL 修复为友好的 URL的主要内容,如果未能解决你的问题,请参考以下文章
Rails 6 - 将 URL 中 root_path 的参数更改为 SEO 友好的 URL
seo 友好的 url 使用西里尔字符 х 字符,它总是得到 404。如何修复它?