@evanushechkin

Как получить значение из связанной таблицы, при формировании json во вьюхе?

Есть сторонняя БД. К ней обращаюсь из 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 не работает.
  • Вопрос задан
  • 355 просмотров
Решения вопроса 1
@evanushechkin Автор вопроса
У модели Files вообще не должно быть foreign_key, удалил. Каждой записи в Instance соответствует одна запись в Files и на оборот. Хотя первоначально я рассматривал , что одной записи Instance соответствовало несколько записей в Files и в модели Instance было прописано:
has_many :files, :foreign_key => 'instance_fk', :primary_key => 'pk'

А во вьюхе данные из Files читались циклом
json.filesList instance.fileses do |files|
          json.(files, :filepath)
end

Но это вызывало ошибку - undefined method `fileses' for #
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nbekseitov
@nbekseitov
Ruby developer
Почему у модели Instance и Files одинаковый foreign_key 'instance_fk'?Также может в модели Files нужно указатьhas_many :instance
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы