в моем приложении, у меня есть модель «Пользователь». Каждый пользователь может иметь несколько (по электронной почте) адреса, которые определены в модели «Адрес»:Один контроллер, разные мнения для обычных пользователей и администраторов
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) и использовать «если» заявление в вид.
- Используйте что-то вроде «after_filter» в контроллере адресов, чтобы отобразить другой макет.
Если можно отобразить результаты выполнения одного контроллера в двух совершенно разных макетах, в зависимости от его режима работы, что это хороший способ достичь этого?
Заранее спасибо Stefan
Спасибо. Но кажется, что если я это сделаю, я оставил бы путь «соглашения по конфигурации». Я немного волнуюсь - это мое первое приложение Rails - должен ли я уже отклоняться от того, что все остальные делают? – cite
Ну, возможно, соглашение состоит в том, чтобы отобразить одно представление для действия, но я вижу, к чему вы клоните. Если вы просто ищете разные макеты, то решение Staelen является хорошим. Если вы действительно хотите отображать разные представления в зависимости от логики в действии, то я не уверен, что это достаточно близко к основному соглашению, чтобы уйти, не указав, какой вид вы хотите отобразить. – Shadwell
Думаю, я попробую решение Стелена для макета и ваш вариант для шаблона, который будет отображаться. Еще раз спасибо. – cite