2016-12-10 4 views
0

Прошу прощения, мой английский плохой. Вопрос: У меня есть модель Страницы с заголовком столбцов, описанием и т. Д. Я могу создавать, изменять, уничтожать эти страницы. Я вижу содержимое ссылки mydomain/pages/1. Мне нужно, чтобы на каждой странице был шаблон и маршрут, поэтому я могу видеть контент по ссылке, например maydomain/contacts. Как это сделать? Помоги мне, пожалуйста.Управление страницей на Ruby on Rails

+1

Возможно, вам стоит взглянуть на драгоценный камень [friendly_id] (https://github.com/norman/friendly_id). – spickermann

ответ

0

Один из способов реализации собственного решения, чтобы добавить это в файл маршрутов:

get '/mydomain/:slug, to: 'pages#show'

Это довольно общий согласовани, поэтому добавьте его в нижней части вашего маршрута, чтобы он не переопределить другие.

Затем контроллер показать действие будет выглядеть примерно так:

def show 
    @page = Page.find_by_slug(params[:slug]) 
end 

Это, конечно, предполагает, у вас есть столбец пробкового на вашем столе страниц.

0

Я предполагаю, что на «MYDOMAIN» вы имеете в виду корневой адрес вашего сайта (например, myapp.example.com)

Я предлагаю вам разделить проблему на две части:

  1. Используйте атрибут, отличный от идентификатора, чтобы идентифицировать элемент в URL-адресе
  2. Уменьшите маршрут, чтобы контроллер не нуждался в указании.

Для 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-адреса, которые могут быть перенаправлены на этот маршрут.