Ruby 不带Rails的activerecord:获取相关记录

Ruby 不带Rails的activerecord:获取相关记录,ruby,oracle,activerecord,jruby,Ruby,Oracle,Activerecord,Jruby,我试图使用表之间的关系, 两个表中的主键具有相同的名称adm_id (我知道,我知道,但无法控制db) 我在JRuby中使用不带Rails的activerecord 当我得到相关记录(电子邮件)时,我得到下面的错误。 索莫尼能帮我吗 require 'java' require 'activerecord-jdbc-adapter' require "C:/jruby-1.7.4/bin/ojdbc14.jar" Java::OracleJdbcDriver::OracleDriver Act

我试图使用表之间的关系, 两个表中的主键具有相同的名称adm_id (我知道,我知道,但无法控制db) 我在JRuby中使用不带Rails的activerecord

当我得到相关记录(电子邮件)时,我得到下面的错误。 索莫尼能帮我吗

require 'java'
require 'activerecord-jdbc-adapter'
require "C:/jruby-1.7.4/bin/ojdbc14.jar"
Java::OracleJdbcDriver::OracleDriver

ActiveRecord::Base.establish_connection(
   :adapter => 'jdbc',
   :driver => 'oracle.jdbc.driver.OracleDriver',
   :url => 'jdbc:oracle:thin:@xxxxxx:xxxx:xxx',
   :username=>'xxx',
   :password=>'xxx'
 )

class Adm < ActiveRecord::Base
  self.table_name = 'scheme1.db_all'
  self.primary_key = 'adm_id'
  has_many :emails
end

class Email < ActiveRecord::Base
  self.table_name = 'scheme2.db_email'
  self.primary_key = 'adm_id'
  belongs_to :adm, :foreign_key => 'adm_id'
end

lid = Adm.where(adm_id: 99999999).take(1) #ok
email = Email.where(adm_id: 99999999).take(1) #ok
p lid.emails

#error: NoMethodError: undefined method `emails' for #<Array:0x19bc716>
require'java'
需要“activerecord jdbc适配器”
需要“C:/jruby-1.7.4/bin/ojdbc14.jar”
Java::OracleJdbcDriver::OracleDriver
ActiveRecord::Base.build\u连接(
:adapter=>“jdbc”,
:driver=>'oracle.jdbc.driver.OracleDriver',
:url=>'jdbc:oracle:thin:@xxxxxx:xxxx:xxx',
:username=>“xxx”,
:密码=>'xxx'
)
类Adm“adm\u id”
结束
lid=Adm.where(Adm_id:9999999)。取(1)#确定
email=email.where(adm_id:9999999)。接受(1)#确定
p.电子邮件
#错误:NoMethodError:未定义的“电子邮件”方法#

如果只需要一条记录,请不要将任何参数传递给
take

lid   = Adm.where(adm_id: 3441029).take
email = Email.where(adm_id: 3441029).take
p lid.emails

如果有任何参数被提供给
take
,即使它是1,也会返回一个结果数组。

pat:这两个take只是为了检查是否至少存在一条记录,它们的工作方式与我指出的一样。我不熟悉这些包,但我认为它们与我试图通过显示lid.emails使用的关系无关,当您使用不带参数的take时,JRuby 1.7.4中会出现以下错误:ArgumentError:调用
take
(0代表1)的参数数量错误如果您希望查询中有一条记录,最好先使用
,而不是
take
,然后在生成的Adm实例上尝试调用
emails
Adm.where(Adm\u id:3441029)。首先。emails
-或者更简单,因为您正在按主键搜索:
Adm.find(3441029)。emails