2009-11-07 5 views
1

У меня есть следующий сценарий, который я хочу смоделировать наилучшим образом для приложения Rails.Лучший способ моделирования этих отношений Rails

У меня есть контактная модель, которая принадлежит компании. Контакт может создать запрос, чтобы контакт мог иметь много запросов. Запрос может иметь много сообщений, которые могут быть от и до многих контактов. Сообщения могут принадлежать запросу, компании или контакту.

Это меня смущает, как лучше всего моделировать это. Есть идеи?

С наилучшими пожеланиями,

Ричард Мосс

ответ

0

Похоже, путаница в сообщениях, а не в других частях.

Я бы пошел с own_to для каждого запроса, компании и контакта (я предполагаю, что у вас есть сообщения, не связанные с запросами). Затем я сделаю выборочную проверку, чтобы убедиться, что хотя бы один из них указан, но в противном случае не выполните validates_presence_of для любого из них.

Вспомогательный метод может облегчить боль в поиске того, с чем связано данное сообщение, поэтому вам не нужно проверять каждое из этих трех отношений, ищущих одно, которое не равно нулю.

2

Похоже, что Message должно быть polymorphic в этом случае, поскольку они могут принадлежать многим различным моделям. Поскольку контакты могут отправлять сообщения другим контактам, Contact будет иметь две ассоциации с сообщениями, одну для sent_messages, а другую для received_messages. Message будет привязан к отправителю через 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 

Это должно хорошо спланировать ваши отношения. Если вы хотите лучше понять это, Railscast on Polymorphic Associations может быть и проницательным.

Смежные вопросы