2013-07-20 3 views
0

У меня было это везде во всех контроллерах и в виде.Почему это не ускорится?

if current_user 
    transaction 
end 

Это, вероятно, до 100 слов if с помощью current_user.

Поэтому я добавил это это ниже application_controller я заменил все current_user с @current_user

before_filter :current_user_set 

def current_user_set 
    if current_user 
     @current_user = current_user 
    end 
end 

Тем не менее, кажется, что нет никаких изменений :(Это не ускорить. Почему?

+0

Что именно вы пытаетесь сделать? – Zajn

+0

@ Zajn Я думал, что он выдавал много sql, когда я использовал 'current_user', так что я определил' @current_user = current_user' в начале каждого действия (application_controller). Я ожидал, что будет меньше sql и сделает это быстрее – MKK

+1

Это действительно зависит от того, что такое current_user. Вы вообще не упоминаете, откуда оно взялось. Тем не менее, большинство разумных реализаций аутентификации, которые предоставляют метод current_user уже '@current_user || = some.expression.to.find.current_user', поэтому вы не добавляете ничего, кроме вызовов дополнительных методов. –

ответ

1

Когда ты получить текущую информацию пользователя, поместить ее в сеанс вместо того, чтобы вытаскивать ее из базы данных, что это похоже на то, что вы делаете, исправьте меня, если я неправильно понял проблему. Поэтому после того, как пользователь известен:

session[:user] = @user 

Если ваши сеансы находятся в вашей базе данных, это нормально, поскольку информация пользователя не будет отправлена ​​в браузер в cookie, иначе вы можете просто поместить идентификатор объекта пользователя в файл cookie или, возможно, в поле user_id или e-mail, но это означает, что вы должны получить пользователя по user_id или по электронной почте каждый раз, когда вам нужно весь пользовательский объект в приложении, больше SQL ...

в вашей application_controller ссылку на сеанс для пользователя

def current_user 
    session[:user] 
end 

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

Надеюсь, это поможет, ваши вопросы не совсем понятны.

+0

Извините из-за отсутствия моих объяснений. Я использую драгоценный камень под названием «devise» для аутентификации. – MKK

+0

Я не использовал «devise», поэтому я не могу с этим поделать, я надеюсь, что кто-то, кто случится по этому вопросу, может вам помочь. – tronmcp

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