diff --git a/app/models/a.rb b/app/models/a.rb
new file mode 100644
index 0000000..2ccf7e4
--- /dev/null
+++ b/app/models/a.rb
@@ -0,0 +1,4 @@
+class A < Record
+  validates :content, presence: true, ipv4: true
+  validates :name, presence: true
+end
diff --git a/lib/ipv4_validator.rb b/lib/ipv4_validator.rb
new file mode 100644
index 0000000..55b4165
--- /dev/null
+++ b/lib/ipv4_validator.rb
@@ -0,0 +1,17 @@
+require 'ipaddr'
+require 'socket'
+
+class Ipv4Validator < ActiveModel::EachValidator
+  def valid_v4?(addr)
+    return false if addr['/'] # IPAddr accepts addr/mask format
+    IPAddr.new(addr, Socket::AF_INET)
+    true
+  rescue IPAddr::AddressFamilyError, IPAddr::InvalidAddressError
+    false
+  end
+
+  def validate_each(record, attribute, value)
+    return if valid_v4?(value)
+    record.errors[attribute] << 'is not a valid IPv4 address'
+  end
+end