Название у меня не очень понятное, не знаю как сформулировать, если есть предложения, могу отредактировать.
Я хотел бы отобразить все миссии из моего user_facturation. Но я не знаю, как это сделать с текущей структурой БД.
Мои отношения:
mission has_many :mission_facturations
mission_facturation belongs_to :mission
Mission_facturation может быть связана с факторизацией многих элементов (пользователь, партнер и т. д.). Итак, чтобы сохранить это отношение, я сохраняю столбец fact_cat и fact_id. (Немного имеет полиморфные отношения)
Например, если я хочу связать свой Mission_facturation с первым user_facturation, я записываю:
mission_facturation.update(fact_cat: 8, fact_id: UserFacturation.first.id)
Теперь я хотел бы получить доступ ко всем миссиям непосредственно из моей модели user_facturation. Изначально я использовал этот метод в модели user_facturation.rb.
def missions
MissionFacturation.where(fact_cat: 8, fact_id: self.id).where.not(mission_id: nil).map(&:mission)
end
Но это не рендеринг ActiveReccord::Relation, поэтому, когда я использую его для цикла, он не работает должным образом.
Есть ли у вас какие-либо решения для отображения набора миссий в моей модели user_facturation?
Начните запрос с модели Mission, примерно так:
Mission.joins(:mission_facturations).where(mission_facturations: {fact_cat: 8, fact_id: self.id)
Или вы даже можете установить отношения в классе User, чтобы AR обрабатывал соединения за вас:
has_many :mission_facturations, -> { where(fact_cat: 8) }, :foreign_key => "fact_id"
has_many :missions, through: :mission_facturations
Привет @arieljud, спасибо за ответ, это именно то, что я ищу!! Первое решение работает хорошо! Но второй выглядит сильнее. Единственное, что не работает, потому что id не указан в первой строке. Я думаю, что первое должно выглядеть примерно так: has_many :mission_facturations, -> { where(fact_cat: 8, fact_id: self.id) }. Но, очевидно, это не хороший синтаксис. У вас есть идея для ответа?