Rails 3 - как настроить маршруты для example.com/whwhat-i-need - PullRequest
1 голос
/ 01 февраля 2012

У меня есть небольшая база данных с фильмами, которые я видел. Теперь, когда я хочу отобразить детали фильма, значит профиль нужного фильма находится по адресу example.com/movies/21. Но я бы хотел, чтобы на каждом из фильмов был более привлекательный URL-адрес, например, example.com/lords-of-the-rings.

.

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

В вашей модели сохраните имя URL в новом поле, например Movie.permalink

В config/routes.rb:

MyApp::Application.routes.draw do
  match "movies/:permalink" => "movies#show"
end

И в контроллере:

class MoviesController < ApplicationController
  def show
    @movie = Movie.find_by_permalink( params[:permalink] )
  end
end

Подробнее о маршрутах в рельсах: http://guides.rubyonrails.org/routing.html

1 голос
/ 01 февраля 2012

Рассмотрите возможность использования драгоценного камня: https://github.com/Sutto/slugged

Многим нравится такой подход.
Это рельсы 3 +

0 голосов
/ 01 февраля 2012

Просто, чтобы помочь при ответах, вы бы позволили что-то вроде:

http://example.com/movies/lord-of-the-rings

Если это так, то получить параметры [: id] с этого URL-адреса очень просто.

Вы можете автоматизировать генерацию этого последнего: id, изменив to_param модели:

class User < ActiveRecord::Base
  def to_param  # overridden
    name
  end
end

Затем вы можете изменить метод show контроллера для отображения нового формата: id.

user = User.find_by_name(params[:id])
...