有条件地返回ruby中的属性

时间:2017-05-31 21:16:23

标签: ruby-on-rails ruby

我想在页面上显示三个属性:heightwidthvariable_dimensions

如果对象上的第四个属性(width)设置为true(从而无需输入其他属性的数据),我想返回一个显示“Dimensions变量”的字符串。如果length为零,我想返回height x length。我想以其他方式返回完整的height x width x 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

width设置为true时,此方法有效。它使用具有可变尺寸的对象执行我想要的操作。在另外两种情况下,它作为一个数组打印到页面,当{{1}}为零时看起来像[60.3,35.4,无],否则为[39,45.3,30.4]。如何删除阵列样式,使其看起来像10cm x 30cm x 48cm?我之前尝试使用字符串插值,但被告知这是一种反模式。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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