Создайте маршрут ресурсов для контроллера static_pages в rails 6.1.3

всего новичок здесь ^^ Итак, у меня есть куча статических страниц в нижнем колонтитуле, для которых я хотел бы создать маршрут. Прямо сейчас я использую get для создания маршрутов как таковых:

      Rails.application.routes.draw do
  root 'static_pages#home_page'
  get 'static_pages/secret'

  get 'static_pages/stripe_button'
  get 'about_us', to: 'static_pages#about_us'
  get 'rules', to: 'static_pages#rules'
  get 'faq', to: 'static_pages#faq'
  get 'community', to: 'static_pages#community'
  get 'terms', to: 'static_pages#terms'
  get 'privacy', to: 'static_pages#privacy'
end

В идеале я пытаюсь сконцентрировать все это в таких ресурсах:

      resources :static_pages, only: [:index] do
  get :terms, :community, :privacy, :rules, :faq, :about_us, :stripe_button, :secret
end

Вот нижний колонтитул страниц:

      <div class="col">
  <ul>
    <li><%= link_to "About Us", 'about_us', class: 'nav-link d-inline-block' %></li>
    <li><%= link_to "Rules", 'rules', class: 'nav-link d-inline-block' %></li>
    <li><%= link_to "FAQ", 'faq', class: 'nav-link d-inline-block' %></li>
  </ul>
</div>
<div class="col">
  <ul>
    <li><%= link_to "Community", 'community', class: 'nav-link d-inline-block' %></li>
    <li><%= link_to "Terms", 'terms', class: 'nav-link d-inline-block' %></li>
    <li><%= link_to "Privacy", 'privacy', class: 'nav-link d-inline-block' %></li>
  </ul>
</div>

Как мне избавиться от всех поступлений и собрать все в один ресурс?

рубин 2.7.1 рельсы 6.1.3

Большое спасибо :)

2 ответа

Прежде всего, resources- это концепция, которая вращается вокруг фактического ресурса или записи, если хотите. Ваши статические маршруты на самом деле не следуют этому, поэтому вы так, как вы это сделали, на самом деле правильный способ сделать это (см. Также здесь: https://guides.rubyonrails.org/routing.html#non-resourceful-routes ) .

Если вашей единственной целью является рефакторинг вашего файла маршрутов, я бы не стал слишком беспокоиться, на самом деле я бы оставил все как есть, потому что я думаю, что важнее следовать концепциям.

Если вы все еще хотите продолжить и вас не слишком заботит, как выглядят фактические URL-адреса, вы можете сделать это так:

      resources :static_pages, only: [:index] do
    collection do
      get :terms, :community, :privacy, :rules, :faq, :about_us, :stripe_button, :secret
    end
  end

Тогда URL-адреса будут выглядеть так /static_pages/terms.

В collection следит за тем, чтобы не было :idнеобходимо в маршрутах. Вы всегда можете дважды проверить терминал с помощью rails routes - также для того, чтобы найти префикс для помощника link_to (будет terms_static_pages_path).

Вы можете найти там идеи Rails routing: resources with only custom actions

Это может быть вашим решением:

      scope '/', controller: :static_pages do
    get :terms, :community, :privacy, :rules, :faq, :about_us, :stripe_button, :secret
end
Другие вопросы по тегам