Rails 4 + PostgreSQL inet型でprefix length付きIPアドレス(192.0.2.1/24)を保存する
Rails 4からActiveRecordがPostgreSQLのinet型に対応し、IPAddr型に自動的に変換してくれるようになった。しかしこのRuby標準のIPAddr型、プレフィックス長付きのIPアドレス(例えば192.0.2.1/24とか2001:db8::1/64とか)だとうまく扱えず、結果としてDBに正しく保存出来ない。
Railsのissueにも随分前からあがっている: https://github.com/rails/rails/issues/14857
が、未だに対応されてない。今やっているプロジェクトでどうしても必要だったので、とりあえずIPAddr型をCIDR表記に対応させるモンキーパッチを書いて対応した。ついでにGem化しておいた。
https://github.com/s2ugimot/ext_ipaddr
書き換えている内容は lib/ext_ipaddr.rb を見て頂ければ分かるのだが、コンストラクタでかなり怪しげな処理をして強引に対応させている。これでActiveRecord経由でのデータ取得や保存はちゃんとできているが、==もoverrideしてデフォルトから挙動を変更しているので、ちょっと複雑な処理に突っ込むと何かおかしくなるかもしれない。
Author And Source
この問題について(Rails 4 + PostgreSQL inet型でprefix length付きIPアドレス(192.0.2.1/24)を保存する), 我々は、より多くの情報をここで見つけました https://qiita.com/shusugmt/items/aef209af490b9c7ad191著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .