Rails Möglichkeit, verschiedene Aktionen und Ansichten basierend auf dem Benutzertyp zu rendern?

Ich habe ein paar verschiedene Nutzertypen (Käufer, Verkäufer, Administratoren).

Ich möchte, dass sie alle die gleiche URL für account_path haben, aber eine andere Aktion und Ansicht verwenden.

Ich versuche so etwas ...

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

So habe ich render_by_user in ApplicationController definiert ...

  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

It ruft die richtige * _show-Methode im Controller auf. Aber versucht immer noch, "show.html.erb" zu rendern und sucht nicht nach der richtigen Vorlage, die ich dort mit dem Namen "admin_show.html.erb" "buyer_show.html.erb" usw. habe.

Ich weiß, ich kann einfach manuell @ anrufrender "admin_show" in jeder Aktion, aber ich dachte, es könnte eine sauberere Möglichkeit geben, dies alles im Vorher-Filter zu tun.

Oder hat jemand anderes ein Plugin oder eine elegantere Methode zum Aufteilen von Aktionen und Ansichten nach Benutzertyp gesehen? Vielen Dank

Btw, ich benutze Rails 3 (falls es einen Unterschied macht).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage