未定义的方法ip为nil类

时间:2011-10-10 06:17:38

标签: ruby-on-rails methods model

我正在尝试从关联模型中获取模型Method返回信息。它在Rails控制台上没有任何问题,并且当它作为Web服务器运行时也在控制台上输出信息。

对我而言似乎并不困难。但它不起作用。

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 个答案:

答案 0 :(得分:2)

这样做:

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,而ip没有NilClass方法1}}(就像错误说的那样)。这样,它会检查是否有ip_addresses,如果是,则返回第一个ip的{​​{1}},否则返回nil。