Pregunta

No puedo envolver mi cabeza alrededor de esto ...

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

... que funciona bien para mi relación principal, en ese User pueden tener muchos Fantasies, y que un Fantasy pueden pertenecer demasiados Users.

Sin embargo, necesito agregar otra relación para gusto (como en un User "Le gusta" un Fantasy En lugar de "lo tiene" ... piense en Facebook y cómo puede "gustar" un poste de pared, aunque no "pertenece" a usted ... de hecho, el ejemplo de Facebook es casi exactamente lo que yo ' m apuntando).

Comprendí que debería hacer otra asociación, pero estoy un poco confundido en cuanto a cómo podría usarla, o si este es el enfoque correcto. Comencé agregando lo siguiente:

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

... pero ¿cómo creo la asociación a través de Approval en lugar de Fantasizing?

Si alguien pudiera aclararme sobre esto, ¡estaría muy obligado!

¿Fue útil?

Solución

Mantenga su primer conjunto de código, luego en su modelo de usuario Agregue:

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

En su tabla de fantaseos, agregue un campo booleano IS_Apaped.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top