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 (в случае, если это имеет значение).

Ответы на вопрос(1)

Ваш ответ на вопрос