Rails: ¿múltiples "has_many a través" para los dos mismos modelos?
-
23-09-2019 - |
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!
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.