Есть сторонняя БД. К ней обращаюсь из rails приложения. Приложение получает параметр по которому ищет данные в бд и формирует json. Модели описаны ниже
class Patient < ActiveRecord::Base
self.table_name = "patient"
establish_connection "pacs_#{Rails.env}".to_sym
has_many :study, :foreign_key => 'patient_fk'
end
class Study < ActiveRecord::Base
self.table_name = "study"
establish_connection "pacs_#{Rails.env}".to_sym
belongs_to :patient #, foreign_key: "patient_fk"
has_many :serieses, :foreign_key => 'study_fk'
end
class Series < ActiveRecord::Base
self.table_name = "series"
establish_connection "pacs_#{Rails.env}".to_sym
belongs_to :study, :foreign_key => 'study_fk'
has_many :instances, :foreign_key => 'series_fk', :primary_key => 'pk'
end
class Instance < ActiveRecord::Base
self.table_name = "instance"
establish_connection "pacs_#{Rails.env}".to_sym
belongs_to :series, :foreign_key => 'series_fk'
belongs_to :files, :foreign_key => 'instance_fk', :primary_key => 'pk'
end
class Files < ActiveRecord::Base
self.table_name = "files"
establish_connection "pacs_#{Rails.env}".to_sym
belongs_to :instance, :foreign_key => 'instance_fk'
end
Часть кода контроллера для данной вьюхи
def images
siuid = params[:study_iuid] unless params[:study_iuid].blank?
@study = Study.find_by study_iuid: siuid
@patient = Patient.find_by pk: @study.patient_fk
@serieses = Series.where(study_fk: @study.pk)
Во вьюхе делаю следующее
json.extract! @patient, :pat_id, :pat_name
json.extract! @study, :study_iuid, :study_desc, :study_datetime, :num_series, :num_instances
json.seriesList @serieses do |series|
json.(series, :series_iuid, :series_desc, :series_no, :num_instances)
json.instanceList series.instances do |instance|
json.(instance, :sop_iuid)
json.(instance.files, :filepath)
end
end
Проблема только в получении значения filepath, все остальные данные подтягиваются. Не могу понять почему связь не между таблицами не работает.
Ошибка вылезает - undefined method `filepath' for nil:NilClass, т.е. как я понимаю ассоциация между instance и files не работает.