Я знаю, что это старый поток, но я только что столкнулся с необходимостью иметь отдельную навигацию в зависимости от пространства имен контроллера. Решение, которое я придумал, заключалось в следующем: «1001»
<%= render "#{controller.class.name[/^(\w*)::\w*$/, 1].try(:downcase)}/nav" %>
Что выглядит немного сложнее, но в основном делает следующее: для него берется имя класса контроллера, например, «People» для контроллера без пространства имен и «Admin :: Users» для пространства имен. Использование строкового метода [] с регулярным выражением, которое возвращает что-либо до двух двоеточий, или nil, если ничего нет. Затем он меняет это на нижний регистр («try» есть в случае, если нет пространства имен и возвращается nil). Это тогда оставляет нам или пространство имен или ноль. Затем он просто визуализирует частичное с пространством имен или без него, например, без пространства имен:
app/views/_nav.html.erb
или в пространстве имен администратора:
app/views/admin/_nav.html.erb
Конечно, эти частичные значения должны существовать для каждого пространства имен, в противном случае возникает ошибка. Теперь навигация для каждого пространства имен будет отображаться для каждого контроллера без необходимости изменения какого-либо контроллера или представления.