2013-07-01 74 views
1

我試圖使用表之間的關係, 兩個表中的主鍵具有相同的名稱adm_id (我知道,我知道,但無法控制數據庫) 我在JRuby中使用沒有Rails的activerecord。activerecord without Rails:獲取相關記錄

當我得到相關記錄(電子郵件),我得到下面的錯誤。 可能somoene幫我嗎?

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> 

回答

2

如果你只是想要一個單一的記錄,不傳遞任何參數take

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

如果任何參數提供給take,即使是1,返回結果的數組。

+0

pat:這兩個需求只是在那裏檢查是否至少存在一條記錄,並且它們按照我的指示工作。我是新來的這些軟件包,但我認爲他們沒有任何關係,我試圖通過顯示lid.emails 使用,當你使用沒有參數的時候你會在JRuby 1.7.4中得到以下錯誤:ArgumentError :調用'take'的參數個數錯誤(0代表1) – peter

+0

如果你想從查詢中得到單個記錄,最好使用'first'而不是'take',然後嘗試調用生成的Adm實例的'emails': 'Adm.where(adm_id:3441029).first.emails' - 或者甚至更簡單,因爲您正在通過主鍵進行搜索:'Adm.find(3441029).emails' – pat

+0

好的,那可行,謝謝 – peter