ユーザーとプロジェクトの2つのモデルがあります。アイデアは、ユーザーがプロジェクトと他のユーザーの両方をフォローできるということです。当然、ユーザーとプロジェクトは多形の「フォロー可能」タイプの一部です。ここで、ユーザーモデルを使用して、次の3つのことを取得したいと思います。
user.followed_users
user.followed_projects
user.followers
最初の2つは正常に機能します。私が問題を抱えているのは3番目です。これは一種の逆引き参照であり、外部キーが次の表の「followable_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
私のフォローテーブルには次のものがあります:user_id followable_id followable_type
クエリを実行するたびに、次のようになります。
SELECT `users`.* FROM `users` INNER JOIN `follows` ON `users`.`id` = `follows`.`user_id` WHERE `follows`.`user_id` = 7
ここで、「user_id = 7」ではなく、「followable_id = 7 AND followable_type='User」にする必要があります。
何かご意見は?