2013-07-24 3 views
0

Я немного новичок в рельсах.Как «наследовать» переменную класса из ApplicationController

Скажите, что я хочу сделать что-то вроде:

def is_admin? 
@admin = User.grab(session[:username]).admin 
end 

я могу определить это в ApplicationController, но тогда я должен назвать is_admin?() в каждом методе в каждом последующем контроллере. Есть ли способ обойти это, о котором я не знаю?

ответ

1

Используйте :before_filter в начале каждого контроллера:

before_filter :is_admin 

По крайней мере, вы не должны делать это для каждого метода.

0

Я не уверен, что проблема с вызовом is_admin? есть. Методы вызова в Ruby довольно дешевы. Вы можете «memoize» возвращаемое значение, чтобы избежать вызова в базу данных каждый раз, когда метод называется:

def is_admin? 
    unless defined?(@is_admin) 
    @is_admin = User.grab(session[:username]).admin 
    end 

    @is_admin 
end 

С is_admin? может возвращать falsey значение, ||= не будет работать.