2012-06-19 26 views
5

Kısa süre önce bazı şablonlarım ERB'den Haml'a dönüştürdüm. Çoğunlukla daha temiz ve güzel hale geldi, ama düğme tanımları emmeye başladı.Rota yolunu dinamik olarak alın

ben çok tüm diğer sayfalar da bu yararlanacak Intern yanında diğer bazı varlıklara sahip bu

= new_button Intern 

gibi bir şey bu

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

dönüştürmek istiyorum.

Yani, beklendiği gibi çalışıyor bu kodu

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 

yazdınız. Ben sadece bu eval çağrı hakkında emin değilim (çünkü kötülük ve tüm bu). Daha basit ve daha az kötü bir yolu var mı?

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 

cevap

6

Ah, burada daha iyi bir versiyonu.

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

    link_to t('.edit', :default => t("helpers.links.edit")), 
      edit_polymorphic_path(person), 
      :class => 'btn btn-mini' 
end 
+0

sevindim beni Evet, bu çok daha iyidir o – Viren

İlgili konular