无法在 ruby 循环内更新数据库

Can't update database inside of ruby loop

此代码显示注册,其中显示数据。

 cids.each {|c_array|
    puts c_array[0]
    signup = Signup.first(:customer_id => c_array[0])
    #signup.created_at = c_array[1]
    puts "signup is " + signup.inspect
    #signup.update!
  }

结果:

signup is #<Signup @id=1 @user_id=1 @customer_id=74843293 @company_id=6 @created_at=Thu, 08 Jan 2015 22:21:43 -0500 @updated_at=Thu, 08 Jan 2015 22:21:43 -0500>

signup is #<Signup @id=2 @user_id=1 @customer_id=67170279 @company_id=6 @created_at=Thu, 08 Jan 2015 22:21:43 -0500 @updated_at=Thu, 08 Jan 2015 22:21:43 -0500>

signup is #<Signup @id=3 @user_id=1 @customer_id=69079324 @company_id=6 @created_at=Thu, 08 Jan 2015 22:21:44 -0500 @updated_at=Thu, 08 Jan 2015 22:21:44 -0500>

signup is #<Signup @id=4 @user_id=1 @customer_id=60434274 @company_id=6 @created_at=Thu, 08 Jan 2015 22:21:44 -0500 @updated_at=Thu, 08 Jan 2015 22:21:44 -0500>

等等。

但是当我取消注释其他两行时:

 cids.each {|c_array|
    puts c_array[0]
    signup = Signup.first(:customer_id => c_array[0])
    signup.created_at = c_array[1]
    puts "signup is " + signup.inspect
    signup.update!
  }

它坏了:

NoMethodError - undefined method `created_at=' for nil:NilClass:
    customerController.rb:49:in `block (2 levels) in <class:CustomerController>'

有什么想法吗?

似乎您的数组中并不总是有 Signupcustomer_id,有时它是 returns nil 而不是 Signup 对象。只需添加以下检查:

cids.each do |c_array|
  puts c_array[0]
  signup = Signup.first(:customer_id => c_array[0])
  puts "signup is " + signup.inspect
  unless signup.nil?
    signup.created_at = c_array[1]  
    signup.update!
  end
end