в моем приложении у меня есть модель "Пользователь". Каждый пользователь может иметь несколько (email) адресов, которые определены в модели «Адрес»:
Class User < ActiveRecord::Base
has_many :addresses
def is_authorized(op)
# returns true or false
end
def is_owned_by(user)
# returns true or false
end
end
Class Address < ActiveRecord::Base
belongs_to :user
end
Внутри класса AddressController зарегистрированный в данный момент пользователь доступен в переменной экземпляра "@user". Контроллер не позволяет обычным пользователям редактировать, удалять, просматривать и т. Д. Адреса, которые им не принадлежат, но он позволяет администратору редактировать их. Класс AddressController может запросить AddressModel, выполняет ли пользователь, вошедший в систему в данный момент, обычные или суперпользовательские операции.
Все это прекрасно работает, и обновления базы данных производятся, как и ожидалось, однако мне бы очень хотелось иметь различные представления HTML в зависимости от режима работы. Я могу думать только о двух способах достижения этого:
- Сделайте режим работы (нормальный / привилегированный) известным в классе AddressController (используя переменную экземпляра, например, @privileged) и используйте оператор «if» в представлении.
- Используйте что-то вроде "after_filter" в контроллере адресов для рендеринга другого макета.
Если возможно отобразить результаты выполнения одного контроллера в двух совершенно разных макетах, в зависимости от режима его работы, каков хороший способ достижения этого?
Заранее спасибо
Stefan