Возможно ли иметь несколько отношений has_many :through
, которые проходят друг через друга в Rails? Я получил предложение сделать это в качестве решения для другого вопроса, который я разместил, но не смог заставить его работать.
Друзья представляют собой циклическую ассоциацию через таблицу соединений. Цель состоит в создании has_many :through
для friends_comments
, поэтому я могу взять User
и сделать что-то вроде user.friends_comments
, чтобы получить все комментарии, сделанные его друзьями в одном запросе.
class User
has_many :friendships
has_many :friends,
:through => :friendships,
:conditions => "status = #{Friendship::FULL}"
has_many :comments
has_many :friends_comments, :through => :friends, :source => :comments
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
end
Это выглядит великолепно и имеет смысл, но не работает для меня. Это ошибка, которую я получаю в соответствующей части, когда пытаюсь получить доступ к пользователю friends_comments: ERROR: column users.user_id does not exist
: SELECT "comments".* FROM "comments" INNER JOIN "users" ON "comments".user_id = "users".id WHERE (("users".user_id = 1) AND ((status = 2)))
Когда я просто вводить user.friends, который работает, это запрос, который он выполняет: : SELECT "users".* FROM "users" INNER JOIN "friendships" ON "users".id = "friendships".friend_id WHERE (("friendships".user_id = 1) AND ((status = 2)))
Таким образом, кажется, что он полностью забывает об исходном has_many
отношениях дружбы, а затем ненадлежащим образом пытается использовать класс User в качестве таблицы соединений.
Я делаю что-то не так, или это просто невозможно?