¿Forma de carriles para representar diferentes acciones y vistas según el tipo de usuario?
Tengo un par de tipos de usuarios diferentes (compradores, vendedores, administradores).
Me gustaría que todos tengan la misma URL account_path, pero que usen una acción y vista diferentes.
Estoy intentando algo como esto ...
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
Así es como definí render_by_user en 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
Llama al método correcto * _show en el controlador. Pero aun así trata de representar "show.html.erb" y no busca la plantilla correcta que tengo ahí llamada "admin_show.html.erb" "buyer_show.html.erb", etc.
Sé que puedo llamar manualmenterender "admin_show"
en cada acción, pero pensé que podría haber una forma más limpia de hacer todo esto en el filtro anterior.
¿O alguien más ha visto un complemento o una forma más elegante de dividir acciones y vistas por tipo de usuario? ¡Gracias!
Por cierto, estoy usando Rails 3 (en caso de que haga la diferencia).