我在Rails项目中遇到问题。在以前的项目(不是Rails)中,我只是在PostgreSQL中使用“inet”类型来存储带有子网的IP地址,如下所示:
192.168.1.0/30
192.168.1.1/30
192.168.1.2/30
192.168.1.3/30
这是一种将IP和子网存储在一个字段中的好方法。现在,我在Rails(4.0.1)和Ruby(2.0.0 p247)中使用inet类型,但是在我阅读和尝试后,Rails将其转换为IPAddr对象。但是这个IPAddr对象正在破坏我的格式。它将上面的四个示例转换为以下内容:
192.168.1.0/30
有没有一种方法可以防止Rails这样做,或者有一种用字符串替代它的方法?还是另一个 gem ?
当我尝试存储内容时,甚至当我尝试从数据库中读取现有值时,都会出现问题。
只是更详细一点:
IPAddr.new("192.168.1.2/255.255.255.252")
创建数据库条目:
192.168.1.0/24
最佳答案
如果我没记错的话,192.168.1.0/30
在技术上是正确的。
以下几件事可能会有所帮助:
如果在查询中告诉PostgreSQL将值转换为字符串,然后再将其返回到Active Record,则可能会有所帮助。那时,您可以使用IPAddress在解析值之后使用它。如何告诉Active Record告诉PostgreSQL这样做是一个不同的问题。
关于ruby-on-rails - 避免Rails将PostgreSQL inet类型转换为IPAddr对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22772462/