2010-10-21 2 views
2

Как получить доступ в ActionView переменной, которая была определена в ApplicationController?Rails: переменный доступ: от ApplicationController до ActionView

В моем случае я хочу, чтобы мой макет отвечал на переменную, которая была настроена в ApplicationController.

Если бы это было представление, связанное с действием контроллера, мне нужно было бы установить экземпляр var в соответствующее действие, и все было бы в порядке. Но доступ к таким данным в макете - это что-то новое для меня.

Спасибо!

+0

Я считаю, что установка переменной экземпляра все равно будет работать. –

ответ

2

Вы можете создать метод в ApplicationController и вызвать этот метод в своих макетах. Вот как restful_authentication (и многие другие плагины) создают и управляют current_user. Таким образом, в ApplicationController:

def current_user 
    @current_user ||= User.find_by_id(session[:user_id]) 
end 

И в макете:

<% if current_user %> 
    <%= link_to 'logout', logout_path %> 
<% else %> 
    <%= link_to 'login', new_user_session_path %> 
    <%= link_to 'register', new_user_path %> 
<% end %> 

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

+1

Я считаю, что если вы хотите использовать методы контроллера в представлении, вы должны использовать 'helper_method: current_user'. –

+0

Спасибо вам обоим! Спасибо Хайме за хороший пример и спасибо Джейми за предложение помощников - мне действительно нужен помощник, чтобы он работал! Теперь все отлично! Большой! –

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