无法在 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>'
有什么想法吗?
似乎您的数组中并不总是有 Signup
和 customer_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
此代码显示注册,其中显示数据。
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>'
有什么想法吗?
似乎您的数组中并不总是有 Signup
和 customer_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