Динамическое получение маршрута

Недавно я преобразовал некоторые из своих шаблонов из 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

Он работает, как и ожидалось. Я просто не уверен в этом вызове eval(потому что это зло и все такое). Есть ли более простой и менее злой способ?

5
задан Sergio Tulentsev 23 May 2017 в 20:37
поделиться