最近、いくつかのテンプレートを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
呼び出しについてよくわかりません(それは悪であり、すべてであるため)。より単純で邪悪な方法はありますか?