Как изменить URL в Rails - PullRequest
       1

Как изменить URL в Rails

7 голосов
/ 21 августа 2010

У меня есть ресурс под названием Book, затем у меня есть домены, такие как:

   domain.com/books/272

Но я хочу изменить его на

   domain.com/stories/272

Только для URL, не нужносменить контроллер, классы и т. д.

В маршрутах у меня есть

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

  map.root :controller => 'static'

Как это сделать?Спасибо

Ответы [ 3 ]

8 голосов
/ 05 июля 2013

В рельсах 3, я полагаю, вы бы сделали следующее:

resources :books, :path => 'stories'
5 голосов
/ 21 августа 2010

Действительно зависит от того, что у вас уже есть.

Используйте этот код в файле маршрутов: (в случае, если исходный URL-адрес books заменен на stories)

#resource routes
map.resources :books, :as => :stories
#named routes
map.books 'stories/:id'

Без определения маршрутов единственный вариант, который я могу придумать - который кажется ужасно неправильным - это добавить новый контроллер, который наследуется от вашего контроллера книг. Вам нужно будет просмотреть приложение и изменить имя контроллера, используемого для генерации путей или URL-адресов, как показано в следующем примере:

class BooksController < ApplicationController

class StoriesController < BooksController

Лично я бы порекомендовал вам уделить время определению ваших маршрутов, но я думаю, это зависит от того, насколько велико приложение, с которым вы работаете.

Это руководство поможет вам понять маршрутизацию в RoR: http://guides.rubyonrails.org/routing.html

3 голосов
/ 21 августа 2010

Это называется именованными маршрутами и делается в вашем config/routes.rb

В вашем файле маршрутов:

map.stories 'stories/:id', :controller => 'books', :action => 'show'

Тогда, по вашему мнению, вы можете получить доступ к этому маршруту с помощью:

<%= link_to book.name, stories_path(book) %>

Убедитесь, что вы изменили book.name на любое другое имя. также убедитесь, что вы передаете book как локальную переменную в маршрутный путь.

Вы также можете изменить :id, чтобы он был более дружественным к SEO с to_param в соответствующей модели.

В вашей модели:

 def to_param
     "#{id}-#{name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase}"
 end

Также убедитесь, что вы заменили name на атрибут, который на самом деле имеет модель книги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...