Динамическое меню с Rails (ссылки на выходы двух контроллеров в одном представлении) - PullRequest
1 голос
/ 17 ноября 2011

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

Теперь передо мной небольшая проблема - я не могу найти способ «вызвать» действие меню show из application.html.erb (который я использую в качестве оболочки для всех действий и контроллеров) , У него есть основное «тело», в котором есть строка «yield», которая, очевидно, позволит любому из контроллеров, на который есть ссылка, отобразить его вывод. До этого я хотел бы показать динамическое меню в другой части этого HTML.

Возможно ли это, и как можно это сделать?

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

1 Ответ

6 голосов
/ 17 ноября 2011

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

<!-- In application.html.erb -->
<%= yield :menu %>
<!-- Main content goes here -->
<%= yield %>

Затем в отображаемом виде вы можете сделать следующее, если хотите показать меню.

<%= content_for :menu do %>
   <!-- Show menu -->
<% end %>

Таким образом, вы можете отображать меню в видах, в которых вы хотите показывать меню, а не в других.

--- UPDATE --- Для динамического меню с опциями меню, полученными из базы данных, сделайте это

В вашем ApplicationController добавьте before_filter

before_filter :fetch_menu


def fetch_menu
    @menu = #db query goes here
end

В application.html.erb

<div id="menu">
   <%@menu.each do |menu|%>
      <!-- Do something with menu -->
   <% end %>
</div>
...