2012-06-19 271 views
5

我最近將一些模板從ERB轉換爲Haml。大多數情況下它變得更乾淨和更好,但按鈕定義開始吸引。動態獲取路徑路徑

我想這個

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

轉換爲這樣的事情

= new_button Intern 

我還有其他幾個實體之外Intern因此所有其他頁面將從這受益。

所以,我輸入驗證碼

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 

它的工作如預期。我只是不知道該呼叫(因爲它是邪惡的,所有這一切)。有一種更簡單,更邪惡的方式?

回答

6

哦,這裏有一個更好的版本:

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

高興你我回答它 – Viren