has_many usuário: usuários,: através =>: amigos - como?
-
18-09-2019 - |
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.
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:
- Rails auto salva a necessidade associations.You para
save
chamada apenas se o modelo de usuário é novo. - 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