Rails: Múltiplos "Has_Many Through" para os dois mesmos modelos?
-
23-09-2019 - |
Pergunta
Não consigo entender minha cabeç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
... que funciona bem para o meu relacionamento primário, naquele User
posso tenho muitos Fantasies
, e que um Fantasy
posso pertencer para muitos Users
.
No entanto, preciso adicionar outro relacionamento para gosto (como em, um User
"gosta" de um Fantasy
Em vez de "ter" isso ... pense no Facebook e como você pode "gostar" de um post de parede, mesmo que não "pertença" a você ... de fato, o exemplo do Facebook é quase exatamente o que eu ' estou mirando).
Concluí -me que deveria fazer outra associação, mas estou meio confuso sobre como eu poderia usá -lo, ou se essa é a abordagem certa. Comecei adicionando o seguinte:
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
... mas como faço para criar a associação através Approval
em vez de passar Fantasizing
?
Se alguém pudesse me deixar direto, eu seria muito obrigado!
Solução
Mantenha seu primeiro conjunto de código e, no seu modelo de usuário, adicione:
has_many :approved_fantasies, :through => :fantasizings, :source => :fantasy, :conditions => "fantasizings.is_approved = 1"
Na sua tabela de fantasia, adicione um campo booleano de IS_APROVED.