Ruby on rails 如何重构这段Rails代码?
只是出于好奇: 如何美化/重构这段(相当难看的)Rails代码:Ruby on rails 如何重构这段Rails代码?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,只是出于好奇: 如何美化/重构这段(相当难看的)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(na
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)
link_to(name, path, :class => "#{"current" if name == controller_name.titlecase }")
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)
link_to(name, path, :class => "#{"current" if name == controller_name.titlecase }")
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)变量是当前的
使代码更具声明性。2) link\u to
假设nil
表示空类(我们在这里想要的)。我要写:
def section_link(name, path)
is_current = (name == controller.controller_name.titlecase)
link_to(name, path, :class => ('current' if is_current))
end
理由:1)变量
是当前的
使代码更具声明性。2) link\u 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)
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
我也没有得到-1。我非常喜欢第一个片段而不是第二个片段(这段代码太长,并且有点不清楚的字符串插值)。我非常喜欢第一段而不是第二段(这段代码太长,并且有点不清楚的字符串插入)。很好,这段代码获得了最多的选票,所以我决定选择它。谢谢不错。。。但是一些程序员会首先选择
选项
,然后再进行修改。注意,您可以编写完全等效的一行表达式options=name==controller\u name.titlecase?{:class=>'current'}:{}
@tokland我不确定。如果它将选项
全部更改为其他值,那么我同意您的看法,将其初始化为一个值,然后将其更改为另一个值将是非常糟糕的!(假设它可以是42
或“答案”
)@Andy。至少它不会改变它的类型。但是有一个问题:当你做数学时,如果你写x=1
,你会把x
,换成2,然后在相同的范围内吗?不,那没有任何意义。为什么在编程时(这只是实际的数学)它是有意义的?(我的观点:)。太好了,这一次获得了最多的选票,所以我决定去参加。谢谢不错。。。但是一些程序员会首先选择选项
,然后再进行修改。注意,您可以编写完全等效的一行表达式options=name==controller\u name.titlecase?{:class=>'current'}:{}
@tokland我不确定。如果它将选项
全部更改为其他值,那么我同意您的看法,将其初始化为一个值,然后将其更改为另一个值将是非常糟糕的!(假设它可以是42
或“答案”
)@Andy。至少它不会改变它的类型。但是有一个问题:当你做数学时,如果你写x=1
,你会把x
,换成2,然后在相同的范围内吗?不,那没有任何意义。为什么在编程时(这只是实际的数学)它是有意义的?(我的观点:)。嗯,你也可以使用变量。如果class\u for
被多次使用,那没关系,如果只使用一次,那就太过分了。如果class\u for
被多次使用,那没关系,如果只使用一次,那就太过分了。@toklandnil
带有splat,在Ruby 1.9中扩展为不存在。数组以外的任何东西都会扩展到自身。当它不是零时会发生什么helper.link_to(“a”,“b”,“*({:class=>“myclass”}))NoMethodError:未定义[:class,“myclass”]的方法“stringify_keys”:Array@tokland带有splat的nil
在Ruby 1.9中扩展为缺席。数组以外的任何东西都会扩展到自身。当它不是零时会发生什么helper.link_to(“a”,“b”,“*({:class=>“myclass”}))NoMethodError:undefined方法` stringify_keys'for[:class,“myclass”]:array我们有一个姐妹站点,可以回答代码复查问题:-如果你愿意,我可以将你的问题迁移到那里,你可能会得到更多的答案,其中一个可能比公认的更好。我们有一个姐妹网站,回答代码审查问题:-如果你愿意,我可以将你的问题迁移到那里,你可能会得到更多的答案,其中一个可能比公认的更好。