Ruby-on-Rails: множественное has_many: возможно ли?
Можно ли иметь несколько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<br>: 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 в качестве таблицы соединений.
Я что-то не так делаю, или это просто невозможно?