Прошу прощения, мой английский плохой. Вопрос: У меня есть модель Страницы с заголовком столбцов, описанием и т. Д. Я могу создавать, изменять, уничтожать эти страницы. Я вижу содержимое ссылки mydomain/pages/1
. Мне нужно, чтобы на каждой странице был шаблон и маршрут, поэтому я могу видеть контент по ссылке, например maydomain/contacts
. Как это сделать? Помоги мне, пожалуйста.Управление страницей на Ruby on Rails
ответ
Один из способов реализации собственного решения, чтобы добавить это в файл маршрутов:
get '/mydomain/:slug, to: 'pages#show'
Это довольно общий согласовани, поэтому добавьте его в нижней части вашего маршрута, чтобы он не переопределить другие.
Затем контроллер показать действие будет выглядеть примерно так:
def show
@page = Page.find_by_slug(params[:slug])
end
Это, конечно, предполагает, у вас есть столбец пробкового на вашем столе страниц.
Я предполагаю, что на «MYDOMAIN» вы имеете в виду корневой адрес вашего сайта (например, myapp.example.com)
Я предлагаю вам разделить проблему на две части:
- Используйте атрибут, отличный от идентификатора, чтобы идентифицировать элемент в URL-адресе
- Уменьшите маршрут, чтобы контроллер не нуждался в указании.
Для 1, взгляните на это: Rails routes with :name instead of :id url parameters Обратите внимание, что, как @spickermann предполагает friendly_id может быть хорошим решением для вас.
Для 2 вам необходимо создать маршрут без имени контроллера, а затем указать контроллер в определении маршрута. (См Rails Routing Guide):
get ':param', to: :show, controller: 'pages'
Для того, чтобы работать, вам нужно будет поставить его после (ниже в routes.rb) так, чтобы он не intefer с другими маршрутами. Я также рекомендовал бы adding a constraint to the route - чтобы ограничить неправильные URL-адреса, которые могут быть перенаправлены на этот маршрут.
Возможно, вам стоит взглянуть на драгоценный камень [friendly_id] (https://github.com/norman/friendly_id). – spickermann