2012-06-19 18 views
5

Recentemente ho convertito alcuni dei miei modelli da ERB a Haml. Per lo più è diventato più pulito e più bello, ma le definizioni dei pulsanti hanno iniziato a risucchiare.Ottieni percorso percorso dinamicamente

voglio convertire questo

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

a qualcosa di simile

= new_button Intern 

ho diverse altre entità oltre Intern così tutte le altre pagine potrebbero trarre vantaggio da questo.

Così, ho digitato il codice

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 

Sta funzionando come previsto. Non sono sicuro di quella chiamata eval (perché è malvagia e tutto il resto). C'è un modo più semplice e meno malvagio?

risposta

6

Oh, ecco una versione migliore:

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

Sono contento che tu capirlo prima di rispondermi che – Viren

Problemi correlati