我最近将一些模板从 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
打电话(因为这是邪恶的等等)。有没有更简单、不那么邪恶的方法呢?
哦,这是一个更好的版本:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)