неопределенный метод IP для ноль класса - PullRequest
1 голос
/ 10 октября 2011

Я пытаюсь, чтобы метод метода возвращал информацию из связанной модели. Он работает без проблем на консоли Rails, а также выводит информацию на консоль, когда она работает в качестве веб-сервера.

Мне это не кажется очень сложным. Но это не работает.

class Computer < ActiveRecord::Base
  has_many :ip_addresses
  has_one :status

  def first_ip
    @computer = Computer.find(self.id)
    @computer.ip_addresses.first.ip
    end
end


class IpAddress < ActiveRecord::Base
  attr_accessible :ip
  belongs_to :computers
end

[2011-10-10 16:09:02] ERROR ActionView::Template::Error: undefined method `ip' for nil:NilClass
    /usr/local/lib/ruby/gems/1.8/gems/activesupport-3.0.10/lib/active_support/whiny_nil.rb:48:in `method_missing'
    /Users/robertg/RubymineProjects/CMDBTEST/app/models/computer.rb:7:in `first_ip'

Спасибо

1 Ответ

2 голосов
/ 10 октября 2011

Сделайте это:

class Computer < ActiveRecord::Base
  has_many :ip_addresses
  has_one :status

  def first_ip
    first_ip_address = ip_addresses.first
    first_ip_address ? first_ip_address.ip : nil
  end
end

Используя ваш метод, если Computer не имеет ip_addresses, то вызов .first вернет nil, и для NilClass не существует метода ip (как говорится в ошибке). Таким образом, он проверяет, есть ли какие-либо ip_addresses, и если да, возвращает ip первого ip_address, а если нет, возвращает nil.

...