LoginSignup
2
3

More than 5 years have passed since last update.

Rails 4 + PostgreSQL inet型でprefix length付きIPアドレス(192.0.2.1/24)を保存する

Posted at

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してデフォルトから挙動を変更しているので、ちょっと複雑な処理に突っ込むと何かおかしくなるかもしれない。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3