Существует множество подходов, которые вы можете использовать (не все хорошие подходы).
1 - public
каталог
Если это действительно статично, вы можете поместить его в каталог public
. Вещи в каталоге public
будут обслужены немедленно, без прохождения через стек Rails.
Преимущества:
- Поскольку не нужно тратить время на прохождение стека Rails, клиент получит более быстрый ответ.
Недостатки:
- Вы не сможете использовать макет своих сайтов. Или просмотреть помощников, таких как
link_to
.
- Вместо того, чтобы ваши виды находились в одном месте (
app/views
), теперь они в двух местах (app/views
и public
). Это может сбивать с толку.
Мысли: я чувствую, что недостатки здесь перевешивают преимущества. Если вы хотите немного улучшить скорость за счет читабельности и счастья программиста, зачем в первую очередь использовать Rails?
2 - Поместить в app/views
и выполнить рендеринг непосредственно с маршрутизатора
возможно для рендеринга представлений с маршрутизатора. Тем не менее, это определенно не The Rails Way.
От официального RailsGuide по маршрутизации :
1 Назначение Rails Router
Маршрутизатор Rails распознает URL-адреса и отправляет их действиям контроллера.
С архитектурной точки зрения нет ничего плохого в том, чтобы иметь карту маршрутизатора непосредственно в виде. Многие другие фреймворки делают именно это. Однако Rails этого не делает, и отклонение от установленного соглашения может запутать других разработчиков.
Как мне создать контроллер или нет?
Если вы не хотите использовать один из упомянутых выше подходов - да, вы должны создать контроллер.
Тогда возникает вопрос, как назвать контроллер. Этот ответ описывает некоторые варианты. Я перечислю их здесь с некоторыми мыслями. Я также добавлю три других варианта.
3 - Использование ApplicationController
# routes.rb
get "/about" to: "application#about"
# application_controller.rb
class ApplicationController < ActionController::Base
def about
render "/about"
end
end
# app/views/about.html.erb
Преимущество здесь в том, что вы не вводите overhead / bloat, создавая новый контроллер и папку. Недостаток в том, что это не The Rails Way. Каждый созданный вами контроллер наследуется от ApplicationController
. ApplicationController
обычно используется для размещения функций, которыми вы хотите поделиться между всеми другими контроллерами. Посмотрите этот пример из Руководство по обзору контроллеров действий :
class ApplicationController < ActionController::Base
before_action :require_login
private
def require_login
unless logged_in?
flash[:error] = "You must be logged in to access this section"
redirect_to new_login_url # halts request cycle
end
end
end
4 - StaticController
или StaticPagesController
Популярное руководство Майкла Хартла по Ruby on Rails использует a StaticPagesController
. Я согласен с источником Я получил это от того, что мне не нравится такой подход, потому что страницы часто не являются статичными.
Также существует возможность путаницы - почему мы поместили другие статические представления в отдельные контроллеры? Разве статические представления не должны отображаться из StaticPagesController
? Я не думаю, что вероятность путаницы слишком высока, но все же хотел это отметить.
Также обратите внимание на сноску Хартла :
Наш метод создания статических страниц, вероятно, самый простой, но это не единственный способ. Оптимальный метод действительно зависит от ваших потребностей; Если вы ожидаете большое количество статических страниц, использование контроллера Static Pages может быть довольно громоздким, но в нашем примере приложения нам понадобятся только несколько. Если вам нужно много статических страниц, посмотрите на гем high_voltage. ↑
5 - PagesController
Официальное руководство по маршрутизации Ruby on Rails использует PagesController
. Я думаю, что этот подход хорош, но он совсем не описательный. Все это страница. Что отличает эти страницы от других страниц?
6 - UncategorizedPagesController
Я бы назвал контроллер UncategorizedPagesController
, потому что это именно то, чем они являются - страницы без категорий. Да, это немного сложнее печатать и читать. Я предпочитаю преимущество ясности, а не лаконичности, но я мог понять, что выбор был более лаконичным и сочетался с PagesController
или с чем-то еще.
7 - камень высокого напряжения
С High Voltage вам не нужно выполнять утомительную работу по записи маршрутов и пустых действий контроллера:
# routes.rb
root 'pages#home'
get '/about', to: 'pages#about'
get '/contact', to: 'pages#contact'
get '/help', to: 'pages#help'
get '/terms-of-service', to: 'pages#terms_of_service'
get '/landing-page', to: 'pages#landing_page'
...
# pages_controller.rb
def PagesController > ApplicationController
def home
end
def about
end
def contact
end
def help
end
def terms_of_service
end
def landing_page
end
...
end
Вы просто добавляете свои страницы к app/views/pages
и ссылаетесь на них: <%= link_to 'About', page_path('about') %>
.