Как сделать создание диапазона IP-адресов - PullRequest
0 голосов
/ 29 ноября 2010

Есть ли способ создать диапазон IP-адресов?как 192.168.0.1/24.Это слишком раздражает, чтобы создавать данные каждый раз.Я нахожу ipaddress Rubygems.http://rubygems.org/gems/ipaddress. Я хотел бы взять это для созданного диапазона IP-адресов.

в new.heml.erb

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

Я не знаю, как использовать его в рельсахмодели

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

Кто-нибудь может дать мне руководство.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2010

Это то, что вы ищете? (Предупреждение: не проверено):

Модель: 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

Модель: address.rb

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

Вероятно, это не идеальный способ справиться с этим - возможно, потребуется немного больше логики для обработки обновлений модели подсети и каскадирования этих изменений в модели адреса.

В любом случае, надеюсь, это немного поможет.

0 голосов
/ 29 ноября 2010

лучшее решение было бы обеспечить функцию обертки в вашей модели:

def iprange_arr
  IPAddress(iprange)
end

не пытайтесь заменить адреса в поле (iprange), так как было бы трудно прочитать их обратно в поле зрения

...