Ruby-on-Rails: múltiples has_many: ¿posible?
¿Es posible tener múltipleshas_many :through
relaciones que se cruzan en Rails? Recibí la sugerencia de hacerlo como solución para otra pregunta que publiqué, pero no he podido hacer que funcione.
Los amigos son unasociación cíclica a través de una mesa de unión. El objetivo es crear unhas_many :through
parafriends_comments
para poder tomar unUser
y hacer algo comouser.friends_comments
para obtener todos los comentarios hechos por sus amigos en una sola consulta.
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
Esto se ve muy bien y tiene sentido, pero no funciona para mí. Este es el error que obtengo en la parte relevante cuando trato de acceder a los amigos_comentarios de un usuario: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)))
Cuando acabo de ingresar user.friends, que funciona, esta es la consulta que ejecuta:: SELECT "users".* FROM "users" INNER JOIN "friendships" ON "users".id = "friendships".friend_id WHERE (("friendships".user_id = 1) AND ((status = 2)))
Parece que se está olvidando por completo del originalhas_many
a través de una relación de amistad, y luego está tratando de usar de manera inapropiada la clase Usuario como una tabla de unión.
¿Estoy haciendo algo mal o simplemente esto no es posible?