2015-12-29 3 views
0

У меня возникли проблемы с тем, как архивировать навигационное меню зависит от данных модели.Как получить доступ к данным в частичном представлении?

Я начал с создания контроллера для моих статических страниц.

# Static content 

class PagesController < ApplicationController 
    def home 
    end 

    def contact 
    end 

    def services 
    end 
end 

Затем я создал некоторые частичные файлы, а затем установил приложение application.html.erb для их отображения на каждой странице.

<body> 
<p class="notice"><%= notice %></p> 
<p class="alert"><%= alert %></p> 
<%= render "shared/header" %> 
<%= render "shared/nav" %> 
<%= yield %> 
<%= render "shared/footer" %> 
</body> 
</html> 

Теперь мне нужно создать меню нав, где клиент может изменить ссылки, так что у меня есть модель, что истории названия и пуля пункта меню.

Итак, теперь в моем общем/_nav.html.erb мне нужен доступ к объекту @menus. Каковы наилучшие методы рельсов для настройки чего-то подобного? Исходя из других архитектур MVC, моя первая идея заключалась в том, чтобы связать контроллер с навигацией частично, но я не вижу способа сделать это в рельсах. Есть ли способ сделать мой объект @menus глобально доступным во всем приложении, так как он мне понадобится для каждой страницы?

ответ

0

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

1

Наиболее часто используемая практикой является доступ к переменному классу в представлениях действий, и передать класс или другие переменные для частичного зрения, как локальные переменные:

Так что если nav является часто используемыми партиалами в вашем случае, проходе местный @menus в качестве локальной переменной в подвид:

<%= render "shared/nav", menus: @menus %> 

доступ в nav к menus а не @menus.

Смежные вопросы