2017-05-31 69 views
2

有條件返回屬性我有,我想在頁面上顯示三個屬性:lengthheightwidth紅寶石

如果對象上的第四個屬性(variable_dimensions)設置爲true(因此無效輸入其他屬性的數據),我想返回一個字符串,指出「Dimensions variable」。如果width是零,我想回到length X height。我想回到全length X height X width否則。

我嘗試這是一個幫手。

module ItemsHelper 
    def dimensions_available(length, height, width) 
    if @item.variable_dimensions == true 
     return "Dimensions variable" 
    elseif width.nil? 
     dimensions = length, height 
     return dimensions 
    else 
     dimensions = length, height, width 
     return dimensions 
    end 
    end 
end 

這適用於dimensions_variable設置爲true的情況。它按照我想要的尺寸可變的對象進行。在其它兩種情況它打印到頁面作爲陣列看起來像[60.3,35.4,零]當width爲零,和[39,45.3,30.4]否則。如何刪除陣列樣式,使其看起來像10釐米x 30釐米x 48釐米?我以前嘗試過使用字符串插值,但被告知它是反模式。

+3

看着你[前一個問題(https://stackoverflow.com/questions/44273038/check-if-variables-are-null-and-if-not-print)明明是你誤解了tadman試圖告訴你。字符串插值不是反模式。具體建設'「#{X}」'(在字符串中包含什麼比一個'#{...}'插值表達式等)是一個反模式,因爲你不插'x' *有*的東西 - 它相當於'x.to_s'。 '「#{x} cm x#{y} cm x#{z} cm」'不*是反模式。 –

回答

3

使用compact,你可以刪除任何nil尺寸:

module ItemsHelper 
    def dimensions_available(length, height, width) 
    if @item.variable_dimensions 
     "Dimensions variable" 
    else 
     [length, height, width].compact.map do |dim| 
     "#{dim}cm" 
     end.join(' x ') 
    end 
    end 
end 

此外,還有沒有必要return== true

2

你可以做這樣的事情:

module ItemsHelper 
    def dimensions_available(length, height, width) 
    if @item.variable_dimensions 
     "Dimensions variable" 
    elsif width.nil? 
     "#{length}cm x #{height}cm" 
    else 
     "#{length}cm x #{height}cm x #{width}cm" 
    end 
    end 
end