Rails: Несколько «Has_many через» для двух тех же моделей?
-
23-09-2019 - |
Вопрос
Не могу обернуть голову вокруг этого ...
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
... что отлично работает для моих основных отношений, в этом User
Можно имеют много Fantasies
, и что Fantasy
Можно принадлежать слишком много Users
.
Однако мне нужно добавить еще одну связь для симпатия (как в, User
"нравится" Fantasy
Вместо того, чтобы «иметь» это ... подумайте о Facebook и о том, как вы можете «понравиться« настенный пост, хотя это не "принадлежит вам ... На самом деле, пример Facebook-это почти именно то, что я" M стремится).
Я понял, что я должен сделать еще одну ассоциацию, но я в некотором роде смущен тем, как я могу ее использовать, или если это даже правильный подход. Я начал с добавления следующего:
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
... но как мне создать ассоциацию через Approval
а не через Fantasizing
?
Если бы кто -то мог поставить меня прямо на это, я был бы очень обязан!
Решение
Сохраните свой первый набор кода, затем в модели пользователя добавьте:
has_many :approved_fantasies, :through => :fantasizings, :source => :fantasy, :conditions => "fantasizings.is_approved = 1"
В своей фантазийной таблице добавьте логическое поле IS_PRED.