Ответ 1
Существует множество подходов, которые вы можете предпринять (они не все подходят).
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
Преимущество в том, что вы не вводите накладные расходы/раздувание, создавая новый контроллер и папку. Недостатком является то, что это не 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
? Я не думаю, что вероятность путаницы слишком высока, но все же хотелось бы отметить это.
Также обратите внимание на Hartl footnote:
Наш метод создания статических страниц, вероятно, самый простой, но его не единственный способ. Оптимальный метод действительно зависит от ваших потребностей; если вы ожидаете большого количества статических страниц, использование контроллера 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') %>
.