2017-05-31 40 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