Search code examples
ruby-on-railsruby-on-rails-plugins

How to do create IP address range


Is there any way to create IP address range? like 192.168.0.1/24. It's too annoy to create a data each time. I find a Rubygems' ipaddress. http://rubygems.org/gems/ipaddress. I would like to take this to created IP range.

in new.heml.erb

<%= f.lable :iprange %>
<%= f.text.field :iprange %>

I don't how do used it in the rails' models

ip = IPAddress("192.168.0.1/24")
ip.each do |i|
 p i.to_s
end

Somebody can give me some guide.


Solution

  • Is this what you are looking for? (Warning: untested):

    Model: subnet.rb

    require 'ipaddress'
    class Subnet < ActiveRecord::Base
      has_many :addresses
    
      after_create :populate_addresses
    
      def populate_addresses
        range     = IPAddress(self.iprange)
        subnet_id = self.id
    
        range.each do |ip|
          Address.create(:ipv4 => ip, :subnet_id => subnet_id)
        end
      end
    end
    

    Model: address.rb

    class Address < ActiveRecord::Base
      # ipv4: string
      # subnet_id: integer
      belongs_to :subnet
    end
    

    This probably isn't the ideal way of handling this - a bit more logic is probably necessary to handle updates to the Subnet model & cascade those changes to the Address model.

    Anyway, I hope this helps a bit.