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.

¿Fue útil?

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:

  1. Rieles automático ahorra la necesidad de llamar associations.You save sólo si el modelo de usuario es nuevo.
  2. 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
scroll top