Je construis une application Rails accédant à un système hérité. Le modèle de données contient des clients pouvant avoir un ou plusieurs abonnements. Un abonnement appartient toujours à un et un seul client. Bien que pas nécessaire, cette association est représentée par une table de jointure « abonnée », qui ne disposent pas d'une colonne id:Association non normalisée avec les tables héritées dans Rails et ActiveRecord
Column | Type | Modifiers
-----------------+---------+-----------
customer_id | integer | not null
subscription_id | integer | not null
Je possède ce code comme une déclaration de has_and_belongs_to_many à la fois client et Abonnement
class Customer < Activerecord::Base
has_and_belongs_to_many :subscriptions, :join_table => "subscribes",
:foreign_key => "customer_id", :association_foreign_key => "subscription_id"
end
class Subscription < Activerecord::Base
has_and_belongs_to_many :customers, :join_table => "subscribes",
:foreign_key => "subscription_id", :association_foreign_key => "customer_id"
end
Le problème que j'ai est qu'il ne peut y avoir qu'un seul client pour chaque abonnement, pas beaucoup, et la table de jointure contiendra toujours au plus une ligne avec un certain customer_id. Et ainsi, je ne veux pas l'association "clients" sur un abonnement qui renvoie un tableau de (au plus un) client, je veux vraiment la relation "client" qui renvoie le client associé.
Existe-t-il un moyen de forcer ActiveRecord à en faire une relation 1-à-N même si la table jointe elle-même semble en faire une relation N-à-M?
--Thomas
Merci, bonnes suggestions simples! Seul inconvénient je ne pense pas que je puisse assigner à travers la "méthode d'accès" mais ce n'est probablement pas un gros problème pour s'assurer que la relation soit toujours créée de l'autre côté. –