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

У меня есть ресурс под названием 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'

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

7
задан Victor 21 August 2010 в 00:02
поделиться

2 ответа

На самом деле зависит от того, что у вас уже есть.

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

#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

5
ответ дан 6 December 2019 в 12:45
поделиться

Он называется именованными маршрутами и находится в вашем 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 атрибутом, который действительно имеет модель книги.

3
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: