2010-07-05 63 views
0

我想从Rails访问旧数据库模式。我有一个带有主键OBJECT_ID的表NAGIOS_OBJECTS和一个带有HOST_OBJECT_ID列的引用NAGIOS_OBJECTS的表NAGIOS_HOST_CHECKS。因此,我所定义的关系如下:Rails使用primary_key + foreign_key选项关联的问题

class NagiosObject < ActiveRecord::Base 
    has_one :nagios_host_check, :foreign_key => :host_object_id, :primary_key => :object_id 
end 

class NagiosHostCheck < ActiveRecord::Base 
    belongs_to :nagios_object, :foreign_key => :host_object_id, :primary_key => :object_id 
end 

但是,调用a_nagios_object.nagios_host_check或a_nagios_host_check.nagios_object的时候,我总是为零。

任何想法我的代码有什么问题?

回答

2

foreign_key和primary_key应该是字符串,而不是符号

例如:

class NagiosObject < ActiveRecord::Base 
    has_one :nagios_host_check, :foreign_key => 'host_object_id', :primary_key => 'object_id' 
end 

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#M001317

+0

感谢。这解决了它! 但是,使用NagiosHostCheck.create(:nagios_object => NagiosObject.create())创建nagios_host_check对象时,它不会检索正确的ID。相反,我需要做NagiosHostCheck.create(:host_object_id => NagiosObject.create()。id) – elasticsecurity 2010-07-05 19:45:04

+0

似乎有一些奇怪的副作用,因为我的列被称为object_id,因此可能与本地Ruby方法冲突 – elasticsecurity 2010-07-05 20:33:09

+0

@elasticsecurity我认为你是对的,问题在于':object_id'对Rails/Ruby来说意味着特殊的东西,并且使用字符串来解决这个问题。但'foreign_key'和'primary_key'不需要将**分配给'字符串'。我更喜欢使用符号,它更干净,更符合Rails作业的其他部分。 – 2014-09-22 17:54:35