2015-12-01 6 views
0

Итак, в главе 12 или в учебном пособии Хартла мы создаем возможность пользователям следить за «твиттерами» друг друга. Это моделируется как пользователи, формирующие отношения, и мы создаем модель отношений с таблицей, которая имеет follower_id и follow_id. Кроме того, в модели, мы связываем его с пользовательской модели следующим образом:Смутно о модели данных в учебном пособии Хартла в главе 12

class Relationship < ActiveRecord::Base 
    belongs_to :follower, class_name: "User" 
    belongs_to :followed, class_name: "User" 
end 

Мы также связать пользовательскую модель с моделью отношений следующим образом:

class User < ActiveRecord::Base 
    has_many :active_relationships, class_name: "Relationship", 
            foreign_key: "follower_id", 
            dependent: :destroy 
    has_many :passive_relationships, class_name: "Relationship", 
            foreign_key: "followed_id", 
            dependent: :destroy 
    has_many :following, through: :active_relationships, source: :followed 
    has_many :followers, through: :passive_relationships, source: :follower 

Я запутался, почему мы необходимо иметь has_many: следующее в пользовательской модели. В учебнике говорится, что следование за кем-то является активным отношением, поэтому почему нам нужно сказать, что у пользователей много активных отношений, и пользователи также следуют за многими (что является активным отношением). Что такое has_many: после этого has_many: active_relationships не может сделать?

Также мой второй вопрос: почему role_to делится на последователя и следует за ним, а не только с пользователем. Что мы получим, используя два own_to вместо одного пользователя?

ответ

1

Это способ доступа к Users, которые следуют за вами или следуют за конкретным пользователем вместо отношений.

Если у вас только @user.active_relationships, это вернет обратно отношения в таблице соединений. Но с @user.following вы получаете массив ассоциаций из User объектов.

А что касается вашего второго вопроса, то отношения между двумя пользователями берут 2 объекта не один, и было бы бессмысленно иметь только один belongs_to :user.

Ruby on Rails Guides - Associations | Has many :through

+0

Спасибо, отличное объяснение – user2889046

 Смежные вопросы

  • Нет связанных вопросов^_^