Assign nil to datetime?


#1

I think I’ve seen this mentioned before, but I can’t find it.

In the process of destroying a record, I want to assign nil to a
datetime field in another record that belongs to it.

However, when I say…

self.numbers.each do |n|
  [...]
  n.expires = nil
  [...]
  n.save
end

In my before_destroy method, n.expires doesn’t actually get set to nil,
either in unit testing or in “real life”.

If I do the same thing in the console, it seems to work:

n = Number.find(35)
=> #<Number:0x24856b4 @attributes={“expires”=>“2007-01-27 16:15:14”,
“id”=>“35”[…]}>

n.expires = nil
=> nil

n.save
=> true

n = Number.find(35)
=> #<Number:0x2471358 @attributes={“expires”=>nil, “id”=>“35”[…}>

Can somebody tell me what’s going on here?

–Al Evans


#2

Bill W. wrote:

What does your sql declaration for the field look like? Does it
explicitly
allow nil values? Just guessing here…

±--------------±-------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±--------------±-------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
[…]
| expires | datetime | YES | | NULL | |
[…]
±--------------±-------------±-----±----±--------±---------------+

–Al Evans


#3

Hi Al,

Al Evans wrote:

I want to assign nil to a datetime field {…]

However, when I say…
{…]
n.expires = nil
[…]
n.expires doesn’t actually get set to nil,
either in unit testing or in “real life”.

If I do the same thing in the console, it seems to work:

What does your sql declaration for the field look like? Does it
explicitly
allow nil values? Just guessing here…

Best regards,
Bill