Combine 2 ActiveRecord :: Ассоциации :: CollectionProxy - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь сохранить вызов в методе моего контроллера

current_user.posts.includes([:events, :schedule])

Это работает, когда current_user - пользователь, но не работает, когда current_user - менеджер, так как перезапись сообщений в модели менеджера возвращает массив. Мой вопрос заключается в том, как я могу заставить этот метод контроллера работать с включениями: events и: schedule для обоих типов пользователей? Вот как мне настроить мои модели:

Class Post < ApplicationRecord
  has_one :schedule
  has_many :targets, through: schedule
end

Class User < ApplicationRecord
  has_many :targets
  has_many :schedules, through: :targets
  has_many :posts, through: :schedules
end

У меня есть модель менеджера, которая наследует от пользователя

Class Manager < User
  has_many :created_posts, class_name :Post

  def posts
    # Here is where I'm trying to figure out the combination of both User.posts and Manager.created_posts
  end
end

Пользователь has_many: сообщения, если они были отправлены, используя таблица целей и расписание. Менеджер has_many: сообщения такие же, как и у пользователя, но он также должен видеть их: made_posts, включенные в коллекцию.

Вот некоторые из вещей, которые я пробовал:

def posts
  super.or(created_posts) # ArgumentError (Relation passed to #or must be structurally compatible. Incompatible values: [:joins])
end

def posts
  super.includes(created_posts) # ArgumentError (#<Post> was not recognized for preload)
end

def posts
  super + created_posts # NoMethodError (undefined method `includes' for #<Array:0x00007fda1884a6a8>)
end

Любые идеи или советы о том, как улучшить мою структуру ценятся, спасибо!

...