Ruby on rails Rails中远程数据库的关联
我正在尝试在我无法控制的数据库中的两个视图之间建立关联。这是人与工作之间的关系,每个人都有很多工作,每个工作都属于一个人。这是person表:Ruby on rails Rails中远程数据库的关联,ruby-on-rails,ruby,oracle,ruby-on-rails-4,associations,Ruby On Rails,Ruby,Oracle,Ruby On Rails 4,Associations,我正在尝试在我无法控制的数据库中的两个视图之间建立关联。这是人与工作之间的关系,每个人都有很多工作,每个工作都属于一个人。这是person表: class Person < ActiveRecord::Base self.table_name = 'PER_VW' self.primary_key = 'EMPLID' has_many :jobs, foreign_key: 'EMPLID' end 我得到了我期望的结果。这是一个oracle数据库,我正在使用以下gems
class Person < ActiveRecord::Base
self.table_name = 'PER_VW'
self.primary_key = 'EMPLID'
has_many :jobs, foreign_key: 'EMPLID'
end
我得到了我期望的结果。这是一个oracle数据库,我正在使用以下gems进行连接:
gem 'ruby-oci8', '~> 2.1.7'
gem "activerecord-oracle_enhanced-adapter", "~> 1.5.0"
编辑:根据潜伏者的建议,我在两个表中都添加了外键:“EMPLID”,但仍然没有得到任何结果。以下是我在控制台中看到的SQL:
irb(main):004:0> p.jobs
Job Load (36.5ms) SELECT "JOB_VW".* FROM "JOB_VW"
WHERE "JOB_VW"."EMPLID" = :a1 [[nil, nil]]
=> #<ActiveRecord::Associations::CollectionProxy []>
我想[nil,nil]数组与此有关。但是我不知道为什么它会是空的。当关联中有外键时,需要在其他模型中指定它:
class Job < ActiveRecord::Base
self.table_name = 'JOB_VW'
belongs_to :person, foreign_key: 'EMPLID'
end
或者,这可能会起作用,因为员工ID是主键:
Person.find('0037485').jobs
除了我先前的建议之外,我认为Person.whereemplid:'0037485'。jobs是不正确的,因为where返回的集合在本例中是由一个项组成的集合。根据我更新的答案,尝试从集合中获取第一项。我希望Person.whereemplid:'0037485'。jobs在没有第一项的情况下抛出错误。令人费解的是,为什么p.jobs在p=Person.whereemplid:'0037485'时返回为空。如果是的话,那么我的最新建议可能无法完全解决这个问题。这是一个非常直接的关联,应该会起作用。我在来自Rails的远程MS SQL数据库中使用了这个关系和其他一些更复杂的关系,它工作得很好。也许Oracle适配器有问题。您有其他适配器可供选择吗?谢谢您提供的一些建议。我一定是有。第一个在链中,只是没有正确地将它复制到我的问题中,因为它没有抛出错误。我更新了问题,将其包括在内。我看看能不能找到另一个适配器。这个问题是否也与我的工作模式没有主键有关?虽然我可以找到一个复合键,但视图中没有一个明确定义。这是一个好问题。我不明白为什么工作模型中缺少主键会影响创建有效的查询,以获取与给定员工Id相关的工作。但是,这可能是重要方法的内部问题。
class Job < ActiveRecord::Base
self.table_name = 'JOB_VW'
belongs_to :person, foreign_key: 'EMPLID'
end
Person.where(emplid: '0037485').first.jobs
Person.find('0037485').jobs