has_many de usuarios: usuarios,: a través de => amigos - ¿cómo?
-
18-09-2019 - |
Pregunta
Este es mi código:
class Friend < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
end
class User < ActiveRecord::Base
#...
has_many :friends
has_many :users, :through => :friends
#...
end
Cuando ahora comenzar a agregar usuarios por ...
user.users << user2
user.save
Sólo el user_id del amigo está vacío, friend_id es nulo.
Cualquier ayuda?
suyo, Joern.
Solución
Es necesario añadir el atributo :source
a su asociación has_many through
.
class User < ActiveRecord::Base
has_many :friends
has_many :users, :source => :friend, :through => :friends
end
Ahora las siguientes llamadas funcionarán.
u1.users << u2
u.friends.last
# will print #<Friend id: 1, user_id: 1, friend_id: 4>
Notas:
- Rieles automático ahorra la necesidad de llamar associations.You
save
sólo si el modelo de usuario es nuevo. - Probablemente debería cambiar el nombre de la asociación a algo más explícito. Por ejemplo:.
friend_users
etc.
Otros consejos
Trate: Railscasts - autorreferencial Asociaciones . Por lo general tiene muy buenos tutoriales sobre todos los temas enumerados.
Creo que es necesario eliminar la belongs_to: usuario en su modelo amigo
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow