2013-02-01 30 views
0

如何擺脫if conditional中的重複?如何正確返回一個或兩個合併的content_tags?

def set_caption(result) 
    if result.respond_to?(:app_name) 
    content_tag(:div, result.type_name, class: 'type-name') + 
     content_tag(:div, result.app_name, class: 'app-name') 
    else 
    content_tag(:div, result.type_name, class: 'type-name') 
    end 
end 

回答

1

這是否適合您?

def set_caption(result) 
    rv = content_tag(:div, result.type_name, class: 'type-name') 
    if result.respond_to?(:app_name) 
    rv += content_tag(:div, result.app_name, class: 'app-name') 
    end 
    rv 
end 
-2
def set_caption(result) 
    [:type_name, *(:app_name if result.respond_to?(:app_name))] 
    .map{|name| content_tag(:div, result.send(name), class: name.hyphenize)} 
    .inject(:+) 
end 

或者,假設result.respond_to?(:type_name)始終是真實的:

def set_caption(result) 
    [:type_name, :app_name] 
    .map{|name| if result.respond_to?(name) 
    content_tag(:div, result.send(name), class: name.hyphenize) 
    end}.compact.inject(:+) 
end 
+1

狂亂過於複雜的解決方案,如果我見過一個。我永遠不希望一個同事爲我不得不努力的項目添加類似的東西。 – meagar

相關問題