Domanda

Non riesco a avvolgere la testa attorno a questo ...

class User < ActiveRecord::Base
  has_many :fantasies, :through => :fantasizings
  has_many :fantasizings, :dependent => :destroy
end

class Fantasy < ActiveRecord::Base
  has_many :users, :through => :fantasizings
  has_many :fantasizings, :dependent => :destroy
end

class Fantasizing < ActiveRecord::Base
  belongs_to :user
  belongs_to :fantasy
end

... che funziona bene per la mia relazione principale, in quella a User Potere avere molti Fantasies, e che a Fantasy Potere appartenere a molti Users.

Tuttavia, devo aggiungere un'altra relazione per simpatia (come in, a User "Mi piace" a Fantasy Piuttosto che "lo ha" ... pensa a Facebook e a come puoi "come" un post muro, anche se non ti appartiene "... in effetti, l'esempio di Facebook è quasi esattamente quello che io" mi punta).

Ho raccolto che avrei dovuto fare un'altra associazione, ma sono un po 'confuso su come potrei usarla, o se questo è anche l'approccio giusto. Ho iniziato aggiungendo quanto segue:

class Fantasy < ActiveRecord::Base

  ...

  has_many :users, :through => :approvals
  has_many :approvals, :dependent => :destroy
end

class User < ActiveRecord::Base

  ...

  has_many :fantasies, :through => :approvals
  has_many :approvals, :dependent => :destroy
end

class Approval < ActiveRecord::Base
  belongs_to :user
  belongs_to :fantasy
end

... ma come posso creare l'associazione attraverso Approval piuttosto che attraverso Fantasizing?

Se qualcuno potesse mettermi direttamente su questo, sarei molto obbligato!

È stato utile?

Soluzione

Conserva il tuo primo set di codice, quindi nel modello utente Aggiungi:

has_many :approved_fantasies, :through => :fantasizings, :source => :fantasy, :conditions => "fantasizings.is_approved = 1"

Nella tua tabella fantastica, aggiungi un campo booleano IS_APROVOTED.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top