Можно ли определить объект ActiveRecord на основе результатов запроса .select в других моделях? - PullRequest
0 голосов
/ 07 января 2020

У меня есть объект ActiveRecord, основанный на сложном наборе объединений, слияний и предложений where. Он использует оператор .select для создания списка объектов с различными идентификаторами объектов, которые мне нужно извлечь из базы данных. Псевдокод ниже демонстрирует: (это упрощено с целью сделать вопрос понятным)

list = Foo.joins(:bar).... <etc> ...select("foos.id as foo_id", "bars.id as bar_id")
list.each do |item|
  foo = Foo.find(item.foo_id)
  bar = Bar.find(item.bar_id)
  ... <do something with foo and bar>
end

, поэтому list - это массив Foos с добавленными атрибутами и аксессорами для :foo_id и :bar_id , Что я хотел бы сделать, так это избежать необходимости извлекать foo и bar в l oop. Поэтому я пытаюсь выяснить, как создать list таким образом, чтобы я мог сделать следующее:

list.each do |item|
  foo = item.foo
  bar = item.bar
  ... <do something with foo and bar>
end

Я думаю, мне нужно создать новый объект с соответствующими ассоциациями:

class ThingGetter < ApplicationRecord
  belongs_to :foo
  belongs_to :bar

  def self.list
    Foo.joins(:bar).... <etc> ...select("foos.id as foo_id", "bars.id as bar_id")
  end
end

ThingGetter.list.each do |item|
  foo = item.foo
  bar = item.bar
  ... <do something with foo and bar>
end

Это близко, но список по-прежнему состоит из Foo с вместо ThingGetter с, поэтому я не могу использовать ассоциации. Как сделать, чтобы list возвращал объект ActiveRecord со списком ThingGetter s?

...