Как загрузить хелпер после загрузки моделей при старте рельс?

Есть модель User и связанная с ней таблица пользователей. Один из пользователей администратор. Есть куча контроллеров и во многих из них для администратора создается уведомление - запись в специальной таблице.
Сейчас перед тем как отправить администратору уведомление пишется примерно такой код:
admin = User.where(admin: true).first
Notification.create(user_id: admin.id, .......)

Т.е. как собрались отправлять уведомление - выбираем из таблицы администратора и выполняем над ним действия.
Хочу сделать класс Admin, который при старте приложения выберет администратора один раз, а потом обращаться к методу класса этого Admin для получения записи администратора из любого контроллера.
Неудачная попытка:
application_helper.rb
module ApplicationHelper
class Admin
	@@admin = User.where(admin: true).first
	if @@admin
		puts '::Admin loaded'
	else
		puts '::Admin absent !!!!!!!!'
	end

	class << self
		def get
			@@admin
		end
	end
end
end


какой нибудь контроллер:
def some action
 admin = Admin.get
 Notification.create(user_id: admin.id, .......)
end

Возникает ошибка циклической ссылки. Т.е. я так понимаю загрузка кода хелпера стартует до загрузки кода моделей.
Вообще мне не обязательно Admin пихать в хелпер, просто необходимо, чтобы класс Admin инициализировался после User и был доступен в теле контроллеров. Как сделать? помогите пожалуйста

PS как вы поняли я не хочу создавать экземпляр класса Admin а непосредственно обращаться к методу класса
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
sharikov_d
@sharikov_d
Мне стыдно за ваши вопросы и ответы
Если твой админ статичен, то ты можешь его данные вообще заткнуть в YAML/жисон/любой другой формат и подгрузить как константы в том же инишиалайзере.

В конце концов, ты можешь сделать так:
# user.rb

def self.admin
  where(admin: true).first
end


лучше объясни зачем тебе такая оптимизация, думается мне, что ты не туда думаешь
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы