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

期待どおりに機能しています。私はそのeval呼び出しについてよくわかりません(それは悪であり、すべてであるため)。より単純で邪悪な方法はありますか?

4

2 に答える 2

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
于 2012-06-19T17:16:20.287 に答える