Got a strange problem:
Boolean field not getting saved on Heroku (works fine locally)
Details:
Rails 2.3 on Heroku (bamboo-ree-1.8.7).
Migration
def self.up
add_column :users, :send_contact_emails, :boolean, :default => false
end
On Heroku:
>> u = User.last
=> #<User id: 100, ......
>> u.send_contact_emails = true
=> true
>> u.save
=> true
>> x = User.last
=> #<User id: 100, ...
>> x.send_contact_emails
=> nil <---------------------------- Why is this ?
When I do this locally (Postgresql 8.4), it works as expected.
Any ideas ?
EDIT:
Ran some tests directly on the DB:
>> ActiveRecord::Base.connection.execute("SELECT send_contact_emails from users where id = 100")[0]
=> {"send_contact_emails"=>nil}
>> ActiveRecord::Base.connection.execute("UPDATE users SET send_contact_emails=FALSE where id=100")
=> #<PGresult:0x7f76d7593580>
>> ActiveRecord::Base.connection.execute("SELECT send_contact_emails from users where id = 100")[0]
=> {"send_contact_emails"=>"f"}
So the problem is with Rails and not Postgresql...
Looks like the problem was on the RAILS side.
Once I manually updated the values to false:
ActiveRecord::Base.connection.execute("UPDATE users SET send_contact_emails=FALSE")
The problem disappeared.
(As if rails 2.3.10 was unable to handle 'nil' in boolean fields..)