1

単なる好奇心から:

この (かなり醜い) 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  
4

5 に答える 5

6
def section_link(name, path)
  options = {}
  options[:class] = 'current' if name == controller_name.titlecase
  link_to name, path, options
end
于 2012-10-07T20:04:44.463 に答える
5

私は書くだろう:

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

于 2012-10-07T20:10:08.820 に答える
1

次のようなことができます。

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
于 2012-10-07T20:10:31.303 に答える
0
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

それが機能する場合、それが本当にリファクタリングを必要とするとは思わないでください...

于 2012-10-07T20:03:09.560 に答える
0
def section_link(name, path)    
  link_to(name, path,
  *({class: "current"} if name == controller.controller_name.titlecase))
end
于 2012-10-07T20:11:35.907 に答える