has_many utente: utenti,: attraverso =>: amici - come?
-
18-09-2019 - |
Domanda
Questo è il mio codice:
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 ora comincio aggiunta di utenti da ...
user.users << user2
user.save
Solo l'id_utente di amico è piena, friend_id è nullo.
Qualsiasi aiuto?
I tuoi, Joern.
Soluzione
È necessario aggiungere l'attributo :source
per la vostra associazione has_many through
.
class User < ActiveRecord::Base
has_many :friends
has_many :users, :source => :friend, :through => :friends
end
Ora i seguenti chiamate funzioneranno.
u1.users << u2
u.friends.last
# will print #<Friend id: 1, user_id: 1, friend_id: 4>
Note:
- Rails automatico salva l'associations.You bisogno di chiamare
save
solo se il modello utente è nuovo. - Probabilmente dovrebbe rinominare l'associazione a qualcosa di più esplicito. Per esempio:.
friend_users
etc
Altri suggerimenti
Prova: Railscasts - autoreferenziale Associazioni . ha in genere molto buoni tutorial su tutti i temi elencati.
Penso che è necessario eliminare l'belongs_to: utente nel modello Friend
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow