Я пытаюсь использовать отношения между таблицами, первичным ключом в обеих таблицах имеет то же имя adm_id (я знаю, я знаю, но не имеют никакого контроля над БД) Я использую activerecord без Rails в JRuby.ActiveRecord без 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>
pat: два брака находятся там, чтобы проверить, существует ли хотя бы одна запись, и они работают, как я указал. Я новичок в этих пакетах, но я полагаю, что они не имеют никакого отношения к отношениям, которые я пытаюсь использовать, показывая lid.emails , а когда вы используете без параметров, вы получите следующую ошибку в JRuby 1.7.4: ArgumentError : неправильное количество аргументов, вызывающих 'take' (0 для 1) – peter
Если вам нужна одна запись из запроса, лучше использовать' first', а не 'take', а затем попробуйте вызвать' emails' на результирующем экземпляре Adm: 'Adm.where (adm_id: 3441029) .first.emails' - или даже проще, если вы ищете по первичному ключу:' Adm.find (3441029) .emails' – pat
ok, that works, thanks – peter