У меня были похожие потребности в одном из приложений, над которым я работал. Необходимо, чтобы данные пользователей были загружены при входе в систему и сохранены в сеансе. Итак, написал модуль под названием session_helpers.rb со следующим:
module SessionHelpers
def get_value(key)
session[key.to_sym]
end
protected
def store_data(*objects)
objects.each do |object|
if object.is_a?(Hash)
object.each do |key, value|
session[key.to_sym] = value
end
end
end
end
def remove_data(*objects)
objects.each do |object|
if object.is_a?(String)
key = to_id(object)
else
key = to_id(object.class.name)
end
session[key] = nil
end
end
def update_data(key, value)
session[key.to_sym] = value
end
private
def to_id(name)
"#{name.parameterize('_').foreign_key}".to_sym
end
end
Вы также можете сделать любой или все методы доступными для представлений:
# application_controller.rb
helper_method :get_value
Из модели я бы извлек хэш данных, которые необходимо вывести в сеанс о пользователе:
def common_data
@data = Hash.new
@data.merge!( { 'news' => self.news.count } )
...
@data
end
Поскольку я хотел сделать это после входа в систему, я переопределил метод devise, чтобы сделать это:
def after_sign_in_path_for(resource_or_scope)
store_data( '_count', current_user.common_data )
dashboard_path
end
Таким образом, я смог загрузить важные данные о пользователе при входе в систему, сохранить их в сеансе и извлекать их в любое время. Надеюсь, это поможет.