2012-06-19 11 views
5

Niedawno przekonwertowałem niektóre z moich szablonów z ERB na Haml. Przeważnie stało się czystsze i ładniejsze, ale definicje przycisków zaczęły ssać.Uzyskaj ścieżkę trasy dynamicznie

chcę przekonwertować ten

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

aby coś takiego

= new_button Intern 

mam kilka innych podmiotów oprócz Intern więc wszystkie inne strony skorzystają z tego, jak dobrze.

Więc Wpisałem ten kod

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 

To działa zgodnie z oczekiwaniami. Po prostu nie jestem pewna co do tego połączenia eval (ponieważ jest złe i tak dalej). Czy istnieje prostszy i mniej zły sposób?

Odpowiedz

6

Oh, tu jest lepsza wersja:

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

Cieszę się zorientować, że przed odebraniem mi to – Viren

Powiązane problemy