Sho*_*hit 10 ruby-on-rails rails-migrations ruby-on-rails-3
我想生成一个迁移,将列添加到数据类型为unsigned int的表中.我希望用它来存储本文中提到的IP地址.
我遇到了这个问题,但它会使迁移数据库依赖,任何想法如何以更好的方式做到这一点?
who*_*ton 15
这里显示了一个工作解决方案,它允许您在rails on Rails内部更加原生地执行它:Ruby on Rails迁移中的unsigned int字段?
为了长寿,答案是在无类型列的选项中添加自定义规范:
t.column :population, 'integer unsigned'
Run Code Online (Sandbox Code Playgroud)
我相信使用'integer unsigned'可以合理地与数据库无关,但可能不是100%.如果您愿意将自己锁定到特定数据库,也可以使用"BIGINT unsigned"之类的东西.
此外,我对Geoff的回答感到有些失望,因为它似乎完全忽略了这样一个事实,即使用相同数量的存储空间时,无符号整数会保存不同的数据集.如果您知道自己不需要负数且有兴趣优化数据存储需求,那么无符号整数就很有价值.要查看mysql的指南,请参阅:http: //dev.mysql.com/doc/refman/5.5/en/integer-types.html
请注意以下JellicleCat的注释,即架构文件不会跟踪此更改,因此在加载架构时,列的签名方面将丢失.
步骤1:
将activerecord-mysql-unsigned添加到GemFile
# add unsigned integer support to mysql2 adapter
gem "activerecord-mysql-unsigned", "~> 0.0.1"
Run Code Online (Sandbox Code Playgroud)
第2步: 安装宝石
bundle install
Run Code Online (Sandbox Code Playgroud)
第3步:
在你喜欢的字段中使用"unsigned:true"
t.integer :cost, unsigned: true
Run Code Online (Sandbox Code Playgroud)
参考:http: //rubydoc.info/gems/activerecord-mysql-unsigned/0.0.1/frames
归档时间: |
|
查看次数: |
9739 次 |
最近记录: |