1

CSV 的一行是:

550012207,1,,,Y,,,,,Y,,

我正在做:

product_id_a = data_values[0]
quantity_a = data_values[1]
product_id_b = data_values[5]

每条线都是一个下订单的场景,有些场景需要将两个产品添加到购物车中。我的问题是当只有一项并且第 5 列留空时。

我最初写道:

if product_id_b == '' || ' '
   do nothing
else
  code to navigate to second product
end

我曾经'' || ' '尝试过任何一个,因为当我单独尝试它们时,它会if忽略else. 然后我写这个只是为了仔细检查:

if product_id_b == ' '
    puts '1'
  elsif product_id_b == ''
    puts '2'
  elsif product_id_b != '' || ' '
    puts 'nothing'
  end

而且它“什么都没有”,所以我不知道价值是什么。当我做:

  puts product_id_a
  puts product_id_b
  puts quantity_a 

它输出

 550012207, , 1

如何识别这个未知值?

4

2 回答 2

0

用于p product_id_b以易于阅读的形式打印值。pputs为此更好。还要p product_id_b.class检查它是否是一个nil对象。

于 2015-09-15T21:22:00.250 回答
0

如果你已经用于CSV.parse解析(我希望你这样做),你可以提到空字段将被解析为nils:

CSV.parse('550012207,1,,,Y,,,,,Y,,')
# => [["550012207", "1", nil, nil, "Y", nil, nil, nil, nil, "Y", nil, nil]]

解决方案:ActiveSupport库(和 Rails)提供了非常方便的方法:.blank?,您可以使用它来测试某个值是否为空:空,仅由空格或 nil 组成。

''.blank? # => true
'    '.blank? # => true
nil.blank? # => true
5.blank?   # => false
于 2015-09-15T21:22:58.137 回答