У меня есть ресурс под названием 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'
Как я могу это сделать? Спасибо
На самом деле зависит от того, что у вас уже есть.
Используйте этот код в своем файле маршрутов: (в случае исходного 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
Он называется именованными маршрутами и находится в вашем 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
атрибутом, который действительно имеет модель книги.