/ / Record di ambito acquistati da un utente: ruby-on-rails, ruby, activerecord, scope, associazioni

Registrazioni di ambito che un utente ha acquistato: ruby-on-rails, ruby, activerecord, scope, associazioni

Questa è la mia configurazione:

  • gli utenti hanno molti acquisti
  • i pacchetti hanno molti acquisti
  • i pacchetti hanno molte ricette

Voglio selezionare tutte le ricette che un utente ha acquistato con un ambito nel Recipe classe. Questo è quello che ho da ora:

scope :purchased, lambda { |user| includes(pack: :purchases).where(packs: { purchases: { user: user } }) }

Per qualche motivo quando chiamo Recipe.purchased(current_user) Ho tutto Recipe record.

Cosa sto facendo di sbagliato con l'ambito?

risposte:

4 per risposta № 1

Questo può essere fatto facilmente in Rails. Basta usare ha molti con il :through opzione come questa:

class User < ApplicationRecord
has_many :purchases
has_many :packs, through: :purchases
has_many :recipes, through: :packs
end

user = User.first
user.recipes # returns all user"s recipes