У меня небольшая проблема с производительностью Authlogic - я работал с ними в течение нескольких дней ... и не могу понять!
Проблема в том, что я использую стандартную установку Authlogic со следующим кодом вapplication_controler для получения current_user (и для продолжения сеанса):
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.user
end
Теперь проблема производительности: Authlogic генерирует при каждом запросе к сайту SQL-оператор для сохранения сеанса и возвращает current_user.Но оператор SQL выглядит так:
**User Load (0.3ms)** SELECT * FROM `users` WHERE (`users`.`id` = '1') LIMIT 1
, это SELECT *
моя проблема!1. Я не хочу current_user, который имеет все атрибуты из пользовательской модели (есть много вещей, которые я не использую при каждом запросе - например, хобби или предпочтительный_мусик и т. Д. (Много данных)) 2. SELECT * медленнее, чем SELECT a, b, c ...
Я хочу что-то вроде:
**User Load (0.1ms)** SELECT id, name, profilphoto_file_name FROM `users` WHERE (`users`.`id` = '1') LIMIT 1
Но UserSession.find(:select => "id,...")
не сработало, потому что .find
это метод из Authlogic (сессия / persistence.rb строка 36), а не из ActiveRecord!
Теперь я не знаю, где Authlogic формирует SQL-оператор ???
(мойВторая идея: разделить User-Model на: user и user_details - так что SELECT * от пользователей не слишком слаб, но я бы предпочел взлом Authlogic.)
Спасибо!