Как лучше сделать в этой ситуации? - PullRequest
0 голосов
/ 17 мая 2011

У меня есть древовидная модель Встреча, Клиент, Контакт.

Когда я создаю новую встречу, я могу выбрать клиента или контакт, но как лучше сохранить эту структуру и связь?! Случай использования client_id и contact_id в таблице собраний не подходит.

1 Ответ

1 голос
/ 17 мая 2011

Мы предполагаем, что кто-то (создатель) может создать встречу.Создатель может быть клиентом или контактом.

Для этого вам сначала понадобятся столбцы "creator_type" и "creator_id" в таблице собраний, поэтому добавьте миграцию, используя script/rails generate migration AddTypeToMeetings

Затемотредактируйте файл миграции следующим образом:

class AddTypeToMeetings < ActiveRecord::Migration
  def self.up
    add_column  :meetings, :creator_id, :integer
    add_column  :meetings, :creator_type, :string
  end
end

Во-вторых, вы должны адаптировать свои модели:

meeting.rb

class Meeting < ActiveRecord::Base
  # polymorphic association
  belongs_to  :creator, :polymorphic => true

end

client.rb

class Client < ActiveRecord::Base
  has_many  :meetings, :as => :creator
end

contact.rb

class Contact < ActiveRecord::Base
  has_many  :meetings, :as => :creator
end

Как использовать:

@my_meeting = Meeting.new

@my_meeting.creator = @my_client
# or if you want a contact:
@my_meeting.creator = @my_contact

Вы можете прочитатьподробнее о полиморфных ассоциациях здесь:

...