Bor*_*ris 3 postgresql activerecord ruby-on-rails heroku rails-postgresql
有一个奇怪的问题:
布尔字段未保存在Heroku上(本地工作正常)
细节:
Rails 2.3 on Heroku (bamboo-ree-1.8.7).
Run Code Online (Sandbox Code Playgroud)
移民
def self.up
add_column :users, :send_contact_emails, :boolean, :default => false
end
Run Code Online (Sandbox Code Playgroud)
在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 ?
Run Code Online (Sandbox Code Playgroud)
当我在本地执行此操作(Postgresql 8.4)时,它按预期工作.
有任何想法吗 ?
编辑:
直接在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"}
Run Code Online (Sandbox Code Playgroud)
所以问题在于Rails而不是Postgresql ......
one*_*how 10
确保重新启动应用.
http://devcenter.heroku.com/articles/rake
运行添加新列的迁移后,必须使用"heroku restart"在heroku上手动重新启动应用程序,以便Rails获取更改.
看起来问题出在 RAILS 方面。
一旦我手动将值更新为 false:
ActiveRecord::Base.connection.execute("UPDATE users SET send_contact_emails=FALSE")
Run Code Online (Sandbox Code Playgroud)
问题消失了。
(好像 Rails 2.3.10 无法处理布尔字段中的“nil”..)
| 归档时间: |
|
| 查看次数: |
2481 次 |
| 最近记录: |