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 回答