Как работать с устаревшими URL-адресами базы параметров в Rails 3? - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть устаревшее PHP-приложение, которое использует следующую структуру URL

/product_info.php?products_id=YYY

где YYY - идентификатор продукта, поле идентификатора модели продукта.

Сейчас я переписываю это приложение с использованием Rails, и для целей SEO мне нужно сохранить эту структуру URL.

Как мне перенаправить вышеуказанный URL-адрес на показательное действие моего ProductsController? Должен ли я использовать Apache mod_rewrite, чтобы переписать его в / products /: id, или я могу сделать это с роутером Rails? Я хотел бы иметь возможность использовать помощники пути, чтобы product_path (@product) возвращал мне /product_info.php?products_id=YYY (снова для SEO)

1 Ответ

3 голосов
/ 25 февраля 2012

Это на самом деле проще, чем я ожидал.

Сначала настройте свой маршрут:

# config/routes.rb
MyApp::Application.routes.draw do
  match '/product_info' => 'products#show'
end

Поскольку Rails обычно не обслуживает файлы PHP, вы будетенеобходимо создать обработчик MIME-типа для .php:

# config/initializers/mime_types.rb
Mime::Type.register_alias 'text/html', :php

Настройте действие products#show, чтобы найти продукт на основе параметра URL.Поскольку вы добавили псевдоним php MIME к text/html, вам не нужно делать ничего особенного, чтобы отобразить представление "PHP":

# app/controllers/products_controller.rb
class ProductsController < ApplicationController
  def show
    @product = Product.find(params[:products_id])
  end
end

Вам придется вручную создать product_path вспомогательный метод, поскольку вы не используете RESTful маршруты:

# app/helpers/products_helper.rb
module ProductsHelper
  def product_path(product)
    "/product_info.php?products_id=#{product.id}"
  end
end

Теперь просто создайте свое представление:

# app/views/products/show.php.erb
<%= link_to @product.name, @product %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...