Ruby on rails Rails 3协会命名者

Ruby on rails Rails 3协会命名者,ruby-on-rails,ruby-on-rails-3,associations,Ruby On Rails,Ruby On Rails 3,Associations,我对Rails比较陌生,有点深陷其中。 我在Rails 3中使用一个预先存在的MSSQL DB,并且必须对模型进行改装以适应 我似乎在创建模型时没有太多问题,但遇到了关联问题 这是我对这两个表的模式 create_table "ip_addresses", :id => false, :force => true do |t| t.integer "id", :null => false t.integer

我对Rails比较陌生,有点深陷其中。 我在Rails 3中使用一个预先存在的MSSQL DB,并且必须对模型进行改装以适应

我似乎在创建模型时没有太多问题,但遇到了关联问题

这是我对这两个表的模式

  create_table "ip_addresses", :id => false, :force => true do |t|
    t.integer  "id",                        :null => false
    t.integer  "computer_id",               :null => false
    t.string   "ip",  :limit => 64, :null => false
    t.string   "ip_subnet",   :limit => 64, :null => false
    t.datetime "timestamp",                 :null => false
    t.datetime "created_at"
    t.datetime "updated_at"
  end



 create_table "computers", :id => false, :force => true do |t|
    t.integer  "id",                                                                    :null => false
    t.string   "uid",                      :limit => 128
    t.string   "enclosure_uid",            :limit => 128
    t.string   "name",                     :limit => 128
    t.integer  "status_id",                                                             :null => false
    t.integer  "designation_id",                                                        :null => false
    t.integer  "hardware_type_id",                                                      :null => false
    t.string   "hardware_model",           :limit => 128
    t.string   "processor_model",          :limit => 128
    t.integer  "processor_speed"
    t.integer  "processor_cores_per_proc", :limit => 1
    t.integer  "processor_count"
    t.decimal  "memory",                                  :precision => 9, :scale => 2
    t.decimal  "physical_disk",                           :precision => 9, :scale => 2
    t.integer  "san_disk"
    t.string   "os_name",                  :limit => 128
    t.string   "os_version",               :limit => 128
    t.string   "os_patchlevel",            :limit => 128
    t.integer  "campus_id",                                                             :null => false
    t.text     "description"
    t.datetime "modification_date",                                                     :null => false
    t.datetime "os_installdate"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
这是两个模型

class Computer < ActiveRecord::Base
  has_many :ip_addresses
end


class IpAddress < ActiveRecord::Base
  belongs_to :computer
end
class计算机
当我使用IpAddress类时,这个关联似乎起作用了,但在Computer类中却没有

见下文

>> IpAddress.first.computer.name
"GC-PRD-PS02"
>> Computer.first.ip_addresses.ip
NoMethodError: undefined method `ip' for #<Class:0x10291cb18>
    from /usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active_record/base.rb:1014:in `method_missing'
    from /usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active_record/associations/association_collection.rb:444:in `send'
    from /usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active_record/associations/association_collection.rb:444:in `method_missing'
    from /usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active_record/base.rb:1127:in `with_scope'
    from /usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active_record/associations/association_proxy.rb:207:in `send'
    from /usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active_record/associations/association_proxy.rb:207:in `with_scope'
    from /usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active_record/associations/association_collection.rb:440:in `method_missing'
    from (irb):40
>IpAddress.first.computer.name
“GC-PRD-PS02”
>>Computer.first.ip_addresses.ip
NoMethodError:未定义的方法“ip”#
from/usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active\u record/base.rb:1014:in'method\u missing'
来自/usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active\u record/associations/associations\u collection.rb:444:in“send”
来自/usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active\u record/associations/associations\u collection.rb:444:in'method\u missing'
from/usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active\u record/base.rb:1127:in“with\u scope”
from/usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active\u record/associations/association\u proxy.rb:207:在“发送”中
from/usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active\u record/associations/associations\u proxy.rb:207:in“with\u scope”
来自/usr/local/lib/ruby/gems/1.8/gems/activerecord-3.0.10/lib/active\u record/associations/associations\u collection.rb:440:in'method\u missing'
来自(irb):40
奇怪的是,我可以通过使用

>> Computer.first.ip_addresses
[#<IpAddress id: 175, computer_id: 687, ip: "10.0.246.80", ip_subnet: "255.255.255.192", timestamp: "2011-08-03 11:17:57", created_at: "2011-10-07 01:06:16", updated_at: "2011-10-07 01:06:16">, #<IpAddress id: 176, computer_id: 687, ip: "192.168.234.235", ip_subnet: "255.255.255.255", timestamp: "2011-08-03 11:17:57", created_at: "2011-10-07 01:06:16", updated_at: "2011-10-07 01:06:16">, #<IpAddress id: 177, computer_id: 687, ip: "192.168.159.1", ip_subnet: "255.255.255.0", timestamp: "2011-08-03 11:17:57", created_at: "2011-10-07 01:06:16", updated_at: "2011-10-07 01:06:16">, #<IpAddress id: 178, computer_id: 687, ip: "192.168.42.1", ip_subnet: "255.255.255.0", timestamp: "2011-08-03 11:17:57", created_at: "2011-10-07 01:06:16", updated_at: "2011-10-07 01:06:16">]
>Computer.first.ip\u地址
[#, #, #, #]
我花了不少时间来尝试解决这个问题。我相信这只是我做关联的方式。任何帮助都将不胜感激

谢谢,
Rob

在集合中调用
ip
——这似乎是个问题<代码>计算机.first.ip\u地址[0]。ip
应该可以工作(假定
ip\u地址
至少包含一个元素)


同样为了学习,请注意
将Computer.first.ip\u addresses.class
放在什么位置。

由于Computer.first.ip\u addresses是一个数组,您需要执行以下操作:

计算机.first.ip\u地址.first.ip

如果你想要第一个ip

Computer.first.ip\u addresses.map(&:ip)


如果你想要所有IP,先生,你是个天才!非常感谢,这肯定是一个数组,我需要选择该数组中的元素。我不确定你是不是星期五,但我肯定是:)再次感谢。最好使用控制台进行调试,如果有错误,可以检查前一个对象的类是什么。。