2

开始使用 Rails,我被块操作困住了。我想通过计算两个日期时间字段之间的差异来遍历模型并更新新字段的整数值。在控制台中执行此操作:

MyModel.all.each do |m|
  m.new_integer_field = m.existing_datetime_field - m.parent_object.existing_datetime_field
  m.save!
end

结果是

 NoMethodError: undefined method `-' for nil:NilClass

如果我这样做,它适用于一张唱片:

m = MyModel.find(1)
m.new_integer_field = m.existing_datetime_field - m.parent_object.existing_datetime_field
m.save

我想这是一个基本的语法问题,但找不到明显的解释。很高兴得到一些指示。

4

2 回答 2

1

其中一个实例中的 m.existing_datetime_field 为 nil,因此该操作不起作用。如果不确定,您需要检查 nil 值:

MyModel.all.each do |m|
  unless m.existing_datetime_field == nil
    m.new_integer_field = m.existing_datetime_field - m.parent_object.existing_datetime_field
  m.save!
end
于 2013-01-13T12:27:11.807 回答
0

正如我已经说过的,实例的属性之一可能是nil.

#inspect要在实例上检查此用法:

MyModel.all.each {|i| puts i.existing_datetime_field.inspect }

似乎这些对象之一是nil然后-方法未定义。

正如您所建议的,您可以在计算差异之前检查操作数。

于 2013-01-19T19:13:26.750 回答