Я новичок в Rails и закончил "Ruby on Rails 3 Tutorial" Майкла Хартла. Хотя книга многому меня учит, я не понимаю эту загадку.
Чтобы просмотреть головоломку, то есть я не понимаю, внутри модели пользователя,
has_many :following, :through=>:relationship, :source=>:followed
как этот фрагмент кода связывает «user.following» с массивом экземпляров User.
А ниже вся загадка.
Во-первых, у меня есть модель Relationship, которая записывает информацию followed_id и follower_id. Внутри модели Relationship ассоциация проста как
class Relationship < ActiveRecord::Base
attr_accessible :followed_id
belongs_to :follower, :class_name => "User"
belongs_to :followed, :class_name => "User"
end
Затем в модели пользователя пользователь возьмет на себя роль последователя и соберет все свои последующие строки в таблице отношений через ассоциацию relationships.
class User < ActiveRecord::Base
.
.
.
has_many :relationships, :foreign_key => "follower_id", :dependent => :destroy
.
До сих пор я получил это.
Но путаница возникла на следующей строке, где через user.following он может собрать все подписки этого пользователя (экземпляры пользователя). Вот так,
has_many :following, :through=>:relationships, :source=>:followed
Я понимаю, что :source=>:followed перезапишет значение по умолчанию и позволит найти все followed_id, связанные с этим пользователем.
Но как Rails может распознать followed_id для ссылки на объект User? Имя метки не соответствует users и не указано :class_name. Я просто не понимаю, как Rails выполняет эту базовую работу, или я упустил некоторые подсказки.
Спасибо! :)