Rails способ визуализации различных действий и представлений в зависимости от типа пользователя?
У меня есть пара разных типов пользователей (покупатели, продавцы, администраторы).
Я бы хотел, чтобы у всех них был один и тот же URL-адрес account_path, но использовались разные действия и представления.
Я пытаюсь что-то вроде этого ...
class AccountsController < ApplicationController
before_filter :render_by_user, :only => [:show]
def show
# see *_show below
end
def admin_show
...
end
def buyer_show
...
end
def client_show
...
end
end
Вот как я определил render_by_user в ApplicationController ...
def render_by_user
action = "#{current_user.class.to_s.downcase}_#{action_name}"
if self.respond_to?(action)
instance_variable_set("@#{current_user.class.to_s.downcase}", current_user) # e.g. set @model to current_user
self.send(action)
else
flash[:error] ||= "You're not authorized to do that."
redirect_to root_path
end
end
Он вызывает правильный метод * _show в контроллере. Но все равно пытается отобразить «show.html.erb» и не ищет нужный мне там шаблон с именем «admin_show.html.erb», customer_show.html.erb и т. Д.
Я знаю, что могу просто позвонить вручнуюrender "admin_show"
в каждом действии, но я думал, что может быть более чистый способ сделать все это в фильтре before.
Или кто-нибудь еще видел плагин или более элегантный способ разбить действия и представления по типу пользователя? Спасибо!
Кстати, я использую Rails 3 (в случае, если это имеет значение).