Рельсовая навигация - PullRequest
       3

Рельсовая навигация

0 голосов
/ 14 августа 2011

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

В настоящее время я использую этот простой вспомогательный метод:

def nav_for(tabs_hash, *active_tabs)
  content_tag(:div, 
    tabs_hash[:tab_info].map { |tab| tab == 'spacer' ?
                            content_tag(:div, '', :class => 'nav-spacer') :
                            link_to(tab[:name], tab[:path], :class => [tab[:class], ("active" if active_tabs.include? tab[:id])].join) 
                  }.join("\n").html_safe,
  :class => tabs_hash[:div_class])
end

Который берет хеш, который включает в себя информацию для элементов навигации и анализирует ее. Я помещаю эти хэши в методы контроллеров, но это не позволяет мне получить доступ к хэшам навигации из других контроллеров.

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

Я просто ищу лучшие практики для этого сценария. Спасибо!

Ответы [ 3 ]

1 голос
/ 14 августа 2011

Вы должны изучить использование Simple Navigation gem. Он делает именно то, что вы пытаетесь сделать, и параметры конфигурации являются мощными.

0 голосов
/ 14 августа 2011

Я думаю, что вам может помочь следующее:

  • Используйте ваш вспомогательный метод с одним аргументом хэша.
  • Определите метод класса в вашем суперконтроллере (например, def ApplicationController.tabs_hash(params) ....
  • В этом методе определите структуру вашего хэша по умолчанию, которая может использоваться всеми другими контроллерами, но определите ее с помощью ряда других методов класса. def ApplicationController.tabs_hash(params);self.top_hash(params);self.middle_hash(params);self.bottom_hash(params);end
  • Вытеперь можно определять конкретные методы в вашем контроллере (как методы класса). Если вы хотите, вы можете смешивать и сопоставлять методы из других контроллеров.
  • Если не определено, вы будете использовать поведение по умолчанию, определенное в ApplicationController

Шаблон - это шаблон абстрактного метода, и он работает здесь, потому что Ruby также использует наследование на стороне класса, поэтому методы класса также могут использовать super.

0 голосов
/ 14 августа 2011

Я бы сказал, что использование форматирования и разметки в помощнике - плохая идея, почему бы не разделить это на частичное расположение, которое бы абстрагировало данные от вашего представления.Что касается хранения данных, я бы подумал, насколько гибко это должно быть во время выполнения.Можете ли вы избежать использования файла YAML для определения ссылок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...