Как создать статическую страницу в Ruby on Rails?
Для создания статической страницы в RoR достаточно лишь поместить *.html страницу в директорию /public. После этого мы сможем получить доступ к ней по ссылке https://localhost:3000/your_page_name.html.
Этот путь довольно прост, но имеет в себе все недостатки статического html-документа. Чтобы быть более гибкими в разработке и поддержке информационных статических страниц (например 'О проекте', 'Контакты') мы будем использовать Rails-way решение.
Создадим контроллер для информационных страниц и добавим первую - about:
Этот путь довольно прост, но имеет в себе все недостатки статического html-документа. Чтобы быть более гибкими в разработке и поддержке информационных статических страниц (например 'О проекте', 'Контакты') мы будем использовать Rails-way решение.
Создадим контроллер для информационных страниц и добавим первую - about:
rails g controller InfoPages about
Этот генератор создаст для нас все необходимые файлы:
Running via Spring preloader in process 25659 create app/controllers/info_pages_controller.rb route get 'info_pages/about' invoke erb create app/views/info_pages create app/views/info_pages/about.html.erb invoke test_unit create test/controllers/info_pages_controller_test.rb invoke helper create app/helpers/info_pages_helper.rb invoke test_unit invoke assets invoke scss create app/assets/stylesheets/info_pages.scss
Если попробовать открыть страницу http://localhost:3000/about мы получим ошибку:
Routing Error
No route matches [GET] "/about"
Данная ошибка говорит о том, что с нашими путями что-то не так. Посмотрим на то, что генератор добавил в наши пути:
Добавленный путь генерирует страницу about после имени контроллера. Убедимся в этом запустив rake routes в терминале:
Prefix Verb | URI Pattern | Controller#Action info_pages_about GET | /info_pages/about(.:format) | info_pages#about
Это означает, что перейдя по ссылке http://localhost:3000/info_pages/about мы увидим содержимое контроллера info_pages и его экшена about.
Генератор для нас подготовил views/info_pages/about.html.erb с следующим содержимым:
<h1>InfoPages#about</h1> <p>Find me in app/views/info_pages/about.html.erb</p>
На этом вся работа по созданию статической страницы на Ruby on Rails заканчивается. Остается лишь добавить нужный контент на страницу. Но также хотелось бы сделать ссылку более презентабельной (убрать имя контроллера и оставить только /about).
Это можно сделать модифицировав путь в config/routes.rb:
get 'info_pages/about' # эту строку удаляем get '/about', to: 'info_pages#about' # а эту добавляем
Запустим rake routes:
Prefix Verb | URI Pattern | Controller#Action info_pages_about GET | /about(.:format) | info_pages#about
Теперь info_pages#about доступен по новой ссылке http://localhost:3000/about. Отметим, что страница взаимодействует с layout, который установлен по умолчанию (обычно application.rb).
Эта заметка написана для Ruby on Rails 6. Обратите внимание, что написание некоторых вещей может отличаться в других версиях RoR.