Pergunta

Este é meu 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

Quando eu agora começar a adicionar usuários por ...

user.users << user2
user.save

Apenas o user_id de amigo está cheio, friend_id é nulo.

Qualquer ajuda?

Seu, Joern.

Foi útil?

Solução

Você precisa adicionar o atributo :source à sua associação has_many through.

class User < ActiveRecord::Base
 has_many :friends
 has_many :users, :source => :friend, :through => :friends
end

Agora, as seguintes chamadas vai funcionar.

u1.users << u2    
u.friends.last
# will print #<Friend id: 1, user_id: 1, friend_id: 4>

Notas:

  1. Rails auto salva a necessidade associations.You para save chamada apenas se o modelo de usuário é novo.
  2. Você provavelmente deve mudar o nome da associação para algo mais explícito. Por exemplo:. friend_users etc

Outras dicas

Tente: Railscasts - Associações auto-referencial . Geralmente tem muito bons tutoriais sobre todos os tópicos listados.

Eu acho que você precisa apagar o belongs_to: usuário em seu modelo amigo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top