Trilhos maneira de renderizar diferentes ações e visualizações com base no tipo de usuário?
Eu tenho alguns tipos diferentes de usuários (compradores, vendedores, administradores).
Gostaria que todos tivessem o mesmo URL account_path, mas usassem uma ação e uma exibição diferentes.
Estou tentando algo assim ...
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
Foi assim que defini render_by_user no 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
Ele chama o método * _show correto no controlador. Mas ainda tenta renderizar "show.html.erb" e não procura o modelo correto que tenho lá chamado "admin_show.html.erb" "comprador_show.html.erb" etc.
Eu sei que posso ligar manualmenterender "admin_show"
em cada ação, mas achei que poderia haver uma maneira mais limpa de fazer isso tudo no filtro anterior.
Ou alguém já viu um plug-in ou uma maneira mais elegante de dividir ações e visualizações por tipo de usuário? Obrigado!
Aliás, estou usando o Rails 3 (caso isso faça alguma diferença).