Has_and_belongs_to_many

Bonjour,
J’ai un petit soucis que je vais tenter d’expliquer :

1 entreprise à plusieurs zones
1 zones à plusieurs points
et un points à plusieurs zones

je me retrouve donc avec un has_and_belongs_to_many :zones pour les
points
et un has_and_belongs_to_many :points pour les zones

Jusqu’ici tout vas bien

Je souhaite que pour une entreprise, un point ne puisse être que dans
une
seul zone de cette dite entreprise.

J’ai essayé de faire :

has_and_belongs_to_many :points do

end

Cela ne fonctionne pas car mes classes sont dans des modules et le bug
est
a priori connu.

le has_and_belongs_to_many :points, :extend => UnModule me
semble compliqué car il faut joueur avec proxy_reflection proxy_owner
que je
ne maîtrise pas trop et qui n’est pas vraiment documenté.

Ma question, y a t il un moyen élégant d’y arrivé ? ou faut t-il passé
par
du code sur les modèles ?

Je dis peut être une connerie mais tu as essayé de fouiller un peu du
coté de “validates_uniqueness_of” ?

Aurélien Bottazini

En fait, je suis en train de me dire que mon analyse n’est peut être pas
judicieuse et qu’il vaudrait mieux y avoir :
entreprise has_many :zone

zone has_many :point

point has_many :zone

le tout vers une table associative “ternaire” avec entreprise_id,
point_id,
zone_id ?

On Wed, May 28, 2008 at 12:11 PM, Aurélien Bottazini
[email protected]

en gros oui avec qq différence :
class Zone < ActiveRecord::Base
has_one :entreprise# ici la différence mais je regarde, je test et je
donnerais la réponse
has_many :points, :through => :jonction
end
2008/5/28 Michel B. [email protected]:

Si j’ai bien compris ton explication, ton système me semble en effet
requérir une table de jointure complexe, et donc un modèle de jointure.

Quelque chose du genre :

================================================

class Jonction < ActiveRecord::Base
has_one :zone
has_one :point
has_one :entreprise

validates_presence_of :zone
validates_presence_of :point
validates_presence_of :entreprise
end

class Zone < ActiveRecord::Base
has_many :entreprises, :through => :jonction
has_many :points, :through => :jonction
end

class Point < ActiveRecord::Base
has_many :entreprises, :through => :jonction
has_many :zones, :through => :jonction
end

class Entreprise < ActiveRecord::Base
has_many :points, :through => :jonction
has_many :zones, :through => :jonction
end

================================================

Ca me semble être la manière la plus simple de composer à partir de ce
que
j’ai compris de ta logique métier.

Oups, je me suis trompé dans la classe Jonction ce serait plutôt des
“belongs_to” que des “has_one”.