У меня есть две модели :Пользователи и проекты. Идея состоит в том, что пользователи могут следить как за проектами, так и за другими пользователями. Естественно, пользователи и проекты являются частью полиморфного «отслеживаемого» типа. Теперь, используя пользовательскую модель, я хочу получить три вещи:
user.followed_users
user.followed_projects
user.followers
Первые две работают нормально; С третьим у меня проблемы. Это своего рода обратный поиск, когда внешний ключ становится столбцом «следующий _id» в следующей таблице, но независимо от того, как я его моделирую, я не могу заставить запрос выполняться правильно.
Модель пользователя
has_many :follows, :dependent => :destroy
has_many :followed_projects, :through => :follows, :source => :followable, :source_type => "Project"
has_many :followed_users, :through => :follows, :source => :followable, :source_type => "User"
has_many :followers, :through => :follows, :as => :followable, :foreign_key => "followable", :source => :user, :class_name => "User"
Модель следования
class Follow < ActiveRecord::Base
belongs_to :followable, :polymorphic => true
belongs_to :user
end
Моя таблица подписчиков имеет :идентификатор пользователя _следующий _идентификатор отслеживаемый _тип
Всякий раз, когда я запускаю запрос, я получаю :
SELECT `users`.* FROM `users` INNER JOIN `follows` ON `users`.`id` = `follows`.`user_id` WHERE `follows`.`user_id` = 7
, где он должен быть «отслеживаемый _id = 7 И отслеживаемый _тип =« Пользователь », а не «пользователь _id = 7
Есть мысли?