Question

Je ne peux pas envelopper ma tête autour de ça ...

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

... ce qui fonctionne bien pour ma relation principale, en ce que un User boîte ont de nombreux Fantasies, et que un Fantasy boîte appartenir trop Users.

Cependant, j'ai besoin d'ajouter une autre relation pour fidèle (comme dans, un User "aime" un Fantasy Plutôt que de "l'a" ... pensez à Facebook et comment vous pouvez "aimer" un poste mural, même s'il ne vous "appartient" pas ... en fait, l'exemple Facebook est presque exactement ce que je M visant).

J'ai rassemblé que je devrais faire une autre association, mais je suis un peu confus quant à la façon dont je pourrais l'utiliser, ou si c'est même la bonne approche. J'ai commencé par ajouter ce qui suit:

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

... mais comment créer l'association à travers Approval plutôt que par Fantasizing?

Si quelqu'un pouvait me mettre directement là-dessus, je serais très obligé!

Était-ce utile?

La solution

Gardez votre premier ensemble de code, alors dans votre modèle d'utilisateur, ajoutez:

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

Dans votre table de fantasme, ajoutez un champ booléen IS_APVÉRÉ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top