2012-06-19 28 views
5

Recientemente convertí algunas de mis plantillas de ERB a Haml. En general, se volvió más limpio y más agradable, pero las definiciones de los botones comenzaron a apestar.Obtener ruta de ruta dinámicamente

quiero convertir este

= link_to t('.new', :default => t("helpers.links.new")), 
      new_intern_path,          
      :class => 'btn btn-primary' if can? :create, Intern  

a algo como esto

= new_button Intern 

Tengo varias otras entidades, además de Intern lo que todas las demás páginas se beneficiarían de esto también.

Por lo tanto, he escrito este código

def new_button(person_class) 
    return unless can?(:create, person_class) 

    new_route_method = eval("new_#{person_class.name.tableize}_path") 

    link_to t('.new', :default => t("helpers.links.new")), 
       new_route_method,          
       :class => 'btn btn-primary' 
    end 

Está funcionando como se esperaba. Simplemente no estoy seguro de la llamada eval (porque es malo y todo eso). ¿Hay una manera más simple y menos malvada?

Respuesta

6

Oh, aquí está una versión mejor:

def edit_button(person) 
    return unless can?(:edit, person) 

    link_to t('.edit', :default => t("helpers.links.edit")), 
      send("edit_#{person.class.name.singularize.underscore}_path", person), 
      :class => 'btn btn-mini' 
end 
+0

alegra que darse cuenta de eso antes que yo contestarla – Viren

Cuestiones relacionadas