Не может обернуть мою голову вокруг этого ...Rails: несколько «has_many through» для двух моделей?
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 и как вы можете «как» стены -post, даже если он не «принадлежит» вам ... на самом деле, пример Facebook - это почти то, к чему я стремлюсь).
Я понял, что должен сделать другую ассоциацию, но я немного смущен тем, как я могу ее использовать, или если это даже правильный подход. Я начал, добавив следующее:
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
?
Если бы кто-то мог установить меня прямо на это, я был бы очень обязан!
Назовите меня скучным, но я не уверен, что следую тому, что вы здесь делаете. Не могли бы вы объяснить немного больше, чтобы я мог понять это? Благодаря! – neezer
Строка кода, которую я разместил, делает то же самое, что и «has_many: fantasies,: through =>: fantasizings», за исключением того, что он проверяет вашу таблицу фантазий для is_approved boolean. Таким образом, User.fantasies перечисляет все фантазии, User.approved_fantasies перечисляет все одобренные фантазии. –
Играли с этим, и я думаю, что я получил суть этого. Благодарю. – neezer