Ruby on rails 3 如何在Rails 3中处理传统的参数基URL?

Ruby on rails 3 如何在Rails 3中处理传统的参数基URL?,ruby-on-rails-3,routes,Ruby On Rails 3,Routes,我有一个使用以下URL结构的遗留PHP应用程序 /product_info.php?products_id=YYY 其中YYY是产品的ID,产品型号的ID字段 我现在正在使用Rails重写这个应用程序,出于SEO目的,我现在必须保留这个URL结构 我应该如何将上述URL路由到我的ProductsController的show action?我应该使用Apache的mod_rewrite将其重写为/products/:id,还是可以使用Rails的路由器?我希望能够使用路径帮助器,以便produ

我有一个使用以下URL结构的遗留PHP应用程序

/product_info.php?products_id=YYY
其中YYY是产品的ID,产品型号的ID字段

我现在正在使用Rails重写这个应用程序,出于SEO目的,我现在必须保留这个URL结构


我应该如何将上述URL路由到我的ProductsController的show action?我应该使用Apache的mod_rewrite将其重写为/products/:id,还是可以使用Rails的路由器?我希望能够使用路径帮助器,以便product_path(@product)返回我/product_info.php?products_id=YYY(同样用于SEO)

这实际上比我预期的更简单

首先,设置您的路线:

# config/routes.rb
MyApp::Application.routes.draw do
  match '/product_info' => 'products#show'
end
由于Rails通常不提供PHP文件,因此需要为
.PHP
创建MIME类型处理程序:

# config/initializers/mime_types.rb
Mime::Type.register_alias 'text/html', :php
设置
products#show
操作以根据URL参数查找产品。由于将
php
MIME类型别名为
text/html
,因此无需执行任何特殊操作即可呈现“php”视图:

现在只需创建您的视图:

# app/views/products/show.php.erb
<%= link_to @product.name, @product %>
#app/views/products/show.php.erb

这实际上比我预期的要简单得多

首先,设置您的路线:

# config/routes.rb
MyApp::Application.routes.draw do
  match '/product_info' => 'products#show'
end
由于Rails通常不提供PHP文件,因此需要为
.PHP
创建MIME类型处理程序:

# config/initializers/mime_types.rb
Mime::Type.register_alias 'text/html', :php
设置
products#show
操作以根据URL参数查找产品。由于将
php
MIME类型别名为
text/html
,因此无需执行任何特殊操作即可呈现“php”视图:

现在只需创建您的视图:

# app/views/products/show.php.erb
<%= link_to @product.name, @product %>
#app/views/products/show.php.erb

这是您需要处理的唯一这样的URL结构,还是有很多不同的URL结构?有两种这样的URL结构,包括这一种。这些URL已经在搜索引擎索引中出现多年了,我们现在无法负担将它们更改为其他内容。也许以后我们可以做301重定向来重新索引它们,但现在不行。这是你需要处理的唯一这样的URL结构,还是有很多不同的URL结构?有两种这样的URL结构,包括这一种。这些URL已经在搜索引擎索引中出现多年了,我们现在无法负担将它们更改为其他内容。也许以后我们可以做301重定向来重新索引它们,但现在不行。为了让我做得更好,并将路由限制为php格式,我只使用了
match'/product#info'=>“products#show',:constraints=>{:format=>/php/}
作为路由。再次感谢。感谢布兰登的精彩帖子,无论你现在在哪里。对于未来的旅行者,我发现我需要在比赛路线的末尾添加
,via::get
,否则Rails会抱怨。幸运的是,我也不需要保留我的遗留URL,所以我只是将遗留URL路由到一个小型控制器操作,该操作通过一条漂亮的
flash
消息重定向到我的新URL。因此,我也不需要path helper方法。为了让它更适合我,并将路由限制为php格式,我只使用了
match'/product#info'=>“products#show',:constraints=>{:format=>/php/}
作为路由。再次感谢。感谢布兰登的精彩帖子,无论你现在在哪里。对于未来的旅行者,我发现我需要在比赛路线的末尾添加
,via::get
,否则Rails会抱怨。幸运的是,我也不需要保留我的遗留URL,所以我只是将遗留URL路由到一个小型控制器操作,该操作通过一条漂亮的
flash
消息重定向到我的新URL。因此,我也不需要path helper方法。