Ruby Ternary运算符似乎没有处理哈希赋值

时间:2013-03-11 21:01:35

标签: ruby-on-rails ruby

在学习ruby的过程中(我有一个java背景)。

我有赋值语句,其中一个hash[:name_field]的值被分配给另一个.nil ?。但是来自右边哈希的价值有时是空白的。这导致我的代码崩溃,因此我添加了undefined method `nil' for 1133:Fixnum (NoMethodError) 等三元逻辑。

虽然这不起作用但我很惊讶......错误是:

people_traffic.each do |person|

  person_record = DaysTraffic.new 

  person_record[:name] = person[:name_filed].nil ? 0 : person[:name_filed]
  person_record[:age]  = person[:age_field].nil ? 0 :  person[:age_field]

  person_record.save
end

以下是代码:

(NoMethodError)

为什么我获得了nil?

的{{1}}

谢谢!

2 个答案:

答案 0 :(得分:6)

.nil?(带问号)不应为.nil。所以在你的情况下,那将是:

person_record[:name] = person[:name_filed].nil? ? 0 : person[:name_filed]

你实际上可以这样写得更简单:

person_record[:name] = person[:name_filed] || 0

答案 1 :(得分:4)

由于#to_inil变为0,,所以写下这样的内容的好方法是:

person_record[:age] = person[:age_field].to_i