只是出於好奇:這個Rails代碼如何被重構?
這個(相當醜陋的)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代碼如何被重構?
這個(相當醜陋的)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)
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)
is_current = (name == controller.controller_name.titlecase)
link_to(name, path, :class => ('current' if is_current))
end
理由:1)的可變is_current
使得代碼稍微更聲明性的。 2)link_to
假設nil
表示空的類(我們在這裏想要的)。
+1,這裏真正的附加價值。 – apneadiving
謝謝,看起來真不錯! – Tintin81
你可以做這樣的事情:
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
好吧,你也可以使用變量。如果'class_for'被使用了很多次,那麼如果它只用了一次,那就太過分了。 – tokland
def section_link(name, path)
link_to(name, path,
*({class: "current"} if name == controller.controller_name.titlecase))
end
我們有一個姊妹網站,回答代碼審查問題:http://codereview.stackexchange.com/ - 如果你想我可以在遷移問題在那裏,你可能會得到更多的答案,其中一個可能比接受的答案還要好。 – Kev