Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中远程数据库的关联_Ruby On Rails_Ruby_Oracle_Ruby On Rails 4_Associations - Fatal编程技术网

Ruby on rails Rails中远程数据库的关联

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

我正在尝试在我无法控制的数据库中的两个视图之间建立关联。这是人与工作之间的关系,每个人都有很多工作,每个工作都属于一个人。这是person表:

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