Как получить доступ к переменным сеанса из декоратора Draper в Rails?

Я хочу иметь возможность получить доступ к переменной сеанса из декоратора. Теперь я не могу этого сделать, и я не могу получить доступ к переменным экземпляра контроллера, скажем, @session_variable,

Есть ли чистый способ добиться этого?

Спасибо!

1 ответ

Когда мне нужен какой-либо объект, кроме контроллера, чтобы иметь доступ к информации запроса, мне нравится использовать то, что я считаю шаблоном контекста. Это выглядит так:

Напишите одноэлементный класс, имеющий только тот интерфейс, который необходим вашему декоратору (следуя принципу разделения интерфейса). В качестве примера, скажем, что ваш декоратор должен знать, вошел ли пользователь в систему. LoginContext синглтон с методом экземпляра user_is_logged_in?, Декоратор может узнать, вошел ли пользователь, вызвав LoginContext.instance.user_is_logged_in?,

Добавить before_filter на ваш ApplicationController который устанавливает синглтон user_is_logged_in приписывать true или же false в соответствии с сеансом перед запуском действия. По желанию, если вы хотите убедиться, что ничего не использует LoginContext за пределами запроса, сделать фильтр around_filter и установите атрибут в nil после запуска действия, и напишите user_is_logged_in? аксессор, так что возникает ошибка, если атрибут равен нулю.

Вышесказанное относится к однопоточным серверам приложений Rails, но вы можете написать ту же функциональность вокруг одноэлементного потока, если вы используете многопоточный сервер приложений.

Другие вопросы по тегам