Я использую следующий фрагмент кода из документации Rails для преобразования IP-адресов в целые числа перед их вставкой в базу данных:
composed_of :user_ip,
:class_name => 'IPAddr',
:mapping => %w(user_ip to_i),
:constructor => Proc.new { |ip| IPAddr.new(ip, Socket::AF_INET) },
:converter => Proc.new { |ip| ip.is_a?(Integer) ? IPAddr.new(ip, Socket::AF_INET) : IPAddr.new(ip.to_s) }
Затем за блоком selected_of следует простая проверка:
validates_uniqueness_of :user_ip
Но проверка в свою очередь выдает ошибку при попытке создать новый объект:
TypeError: Cannot visit IPAddr
Удалите проверку, и ошибка исчезнет.
Если я правильно понимаю, это происходит потому, что: user_ip становится объектом IPAddr, и это не совсем подходит для ActiveRecord. Это правильно, и если так, есть ли способ обойти это?