2009-11-07 13 views
1

J'ai le scénario suivant que je veux modéliser la meilleure façon pour une application Rails.Meilleure façon de modéliser ces relations Rails

J'ai un modèle de contact qui appartient à une entreprise. Un contact peut créer une demande afin que le contact puisse avoir beaucoup de demandes. L'enquête peut avoir de nombreux messages qui peuvent être de et vers de nombreux contacts. Les messages peuvent appartenir à une enquête, une entreprise ou un contact.

Cela a été source de confusion sur la meilleure façon de modéliser cela. Des idées?

Meilleures salutations,

Moss Richard

Répondre

0

Il semble que la confusion est sur les messages, plutôt que les autres parties.

J'irais avec belongs_to pour chaque demande, compagnie et contact (je suppose que vous avez des messages non associés aux enquêtes). Ensuite, je ferais une validation personnalisée pour m'assurer qu'au moins l'un d'entre eux était spécifié - mais sinon, je ne ferais pas de validates_presence_of pour l'un d'entre eux. Une méthode d'aide pourrait soulager la douleur de trouver ce à quoi un message donné est associé, ainsi vous n'avez pas besoin de vérifier chacune de ces trois relations pour en trouver une qui n'est pas nulle.

2

Il semble que Message devrait être polymorphic dans ce cas, car ils peuvent appartenir à de nombreux modèles différents. Parce que les contacts peuvent envoyer des messages à d'autres contacts, Contact aura deux associations avec des messages, un pour sent_messages et l'autre pour received_messages. Message sera lié à un expéditeur via contact_id.

class Contact < ActiveRecord::Base 
    belongs_to :company 
    has_many :enquiries 
    has_many :sent_messages, :class_name => "Message" 
    has_many :received_messages, :as => :messageable, :class_name => "Message" 
end 

class Company < ActiveRecord::Base 
    has_many :contacts 
    has_many :messages, :as => :messageable 
end 

class Enquiry < ActiveRecord::Base 
    belongs_to :contact 
    has_many :messages, :as => :messageable 
end 

class Message < ActiveRecord::Base 
    belongs_to :contact 
    belongs_to :messageable, :polymorphic => true 
end 

Cela devrait modéliser vos exigences relationnelles plutôt bien. Si vous voulez mieux le comprendre, le Railscast on Polymorphic Associations pourrait aussi vous donner un aperçu.

Questions connexes