@pup_pupets

Как правильно организовать структуру layouts, страниц и экшенов для такого вида?

Как ни странно, нашёл что искал на хабре, вот и хочу понять как такое сделать правильно:

64ac3d139fdb424abe20143ec2541826.png
ebc64bd935344d1c9f31c014800026cc.png

Что имеем
Два адреса:
https://habrahabr.ru/users/f15/favorites/
https://habrahabr.ru/users/f15/favorites/comments/

Т.е. в routes описываю так:
resources :users do
    member do
      get 'favorites' => 'users#favorites'
      get 'favorites/comments' => 'users#favorites_comments'
    end
  end


Таким образом, есть два экшена, которые обрабатывают обе ситуации (показ начального избранного и избранных комментариев).

Что хочу получить
Хотелось бы два экшена, один шаблон и с несколькими partials, но немного не понимаю, как это сделать. В голову приходит только одно: один рендер на два экшена, а в шаблоне ставить if на то, какой элемент меню активировать (в зависимости от пришедшего объекта) и какой partial показывать. Но правильно ли делать так или есть другой, более адекватный способ? Ведь если у нас будет не два экшена, а например 8, то придётся вешать восемь if'ов для меню и partial'ов, что несколько избыточно.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@CorbenDallass
Можно сделать как вы описали: один шаблон с разными паршлами в зависимости от выбранного таба. От if можно избавиться просто правильным именованием.

В экшнах:
render template: 'favorites', locales: {tab: action_name}

В темплейте:
= render partial: "favorites/#{tab}"

Если код простой, можно locals не использовать, а сразу применить action_name в темплейте для выбора паршла.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы