単なる好奇心から:
この (かなり醜い) Rails コードをどのように整形/リファクタリングすることができますか?
def section_link(name, path)
link = link_to(name, path)
if name != controller.controller_name.titlecase
link
else
link_to(name, path, :class => 'current')
end
end
単なる好奇心から:
この (かなり醜い) Rails コードをどのように整形/リファクタリングすることができますか?
def section_link(name, path)
link = link_to(name, path)
if name != controller.controller_name.titlecase
link
else
link_to(name, path, :class => 'current')
end
end
def section_link(name, path)
options = {}
options[:class] = 'current' if name == controller_name.titlecase
link_to name, path, options
end
私は書くだろう:
def section_link(name, path)
is_current = (name == controller.controller_name.titlecase)
link_to(name, path, :class => ('current' if is_current))
end
正当化: 1) 変数is_current
により、コードがより宣言的になります。2) 空のクラス (ここで必要なもの)link_to
を意味すると仮定します。nil
次のようなことができます。
def section_link(name, path)
link_to(name, path, class: name == controller.controller_name.titlecase ? "current" : nil)
end
しかし、それは少し読みにくくなっています。クラスの決定を別の方法に分割します。
def section_link(name, path)
link_to(name, path, class: class_for(name) )
end
def class_for(name)
name == controller.controller_name.titlecase ? "current" : nil
end
def section_link(name, path)
if name != controller_name.titlecase
link_to(name, path)
else
link_to(name, path, :class => 'current')
end
end
またはこのようなもの
def section_link(name, path)
link_to(name, path, :class => "#{"current" if name == controller_name.titlecase }")
end
それが機能する場合、それが本当にリファクタリングを必要とするとは思わないでください...
def section_link(name, path)
link_to(name, path,
*({class: "current"} if name == controller.controller_name.titlecase))
end