Relation through


#1

Bonjour,

J’ai une relation has_many entre deux modèles User et Network via un
modèle intermédiaire (utilisation via :through) UserNetwork.

Lorsque je fais mes tests unitaires, initialement je teste sans aucune
relation entre deux modèles, puis j’en ajoute en créant des instances de
la table intermédiaire (c’est peut-être là le problème). Le problème est
que le cache est effectif et aucune relation n’est chargée, à moins que
je force le rechargement.

L’appel de @user1.user_networks renvoie vide (ok)

un= UserNetwork.new
un.user = @user1
un.network = net1
un.save!

et l’appel de :

@user1.user_networks renvoie [] (KO)
@user1.user_networks(true) [un] (ok)

Dois-je faire cela pour être sûr :

net1.user_networks << un
@user1.user_networks << un

Pouvez-vous me dire comment vous gérer cela ?

Merci,

Julien


#2

Le problème rencontré :

http://blog.hasmanythrough.com/2006/04/17/join-models-not-proxy-collections

Une solution élégante :
http://blog.hasmanythrough.com/2006/8/19/magic-join-model-creation

Du coup je fais :
@user1.networks.push_with_attributes( net1, :champ => ‘valeur’ )

Avec :

class User < ActiveRecord::Base
has_many :user_networks
has_many :networks, :through => :user_network do
def push_with_attributes( network, join_attrs = {} )
UserNetworkPrivacy.with_scope( :create => join_attrs ) { self <<
network }
end
end

end