Как смоделировать отношение «может принадлежать А или В» в Rails? - PullRequest
2 голосов
/ 06 июня 2009

Я новичок в RoR - у меня есть три модели: Customer, Job и Note. У Клиентов есть Задания, а у Клиентов и Заданий могут быть Заметки. Есть ли особый способ обработки этого типа отношений в Rails, или он будет работать, если у меня просто нормальные отношения принадлежат к Note?

Меня беспокоит проблема, связанная с тем, что примечание содержит поля как для customer_id, так и для job_id, но только одна запись будет использоваться для одной записи (т. Е. Конкретное примечание может относиться либо к работе, либо к клиенту но никогда не оба), и не очень хороший дизайн базы данных, когда столбец будет равен нулю в половине случаев.

Я слишком обдумываю это, или есть что-то, что мне не понятно?

1 Ответ

4 голосов
/ 06 июня 2009

Я бы предложил использовать полиморфную ассоциацию, так как она более гибкая и расширяемая, и ее легче применять. Требуемая модель ниже:

class Note < ActiveRecord::Base
   belongs_to :notable, :polymorphic => true
end

class Customer < ActiveRecord::Base
   has_many :notes, :as => :notable
end

class Job < ActiveRecord::Base
   has_many :notes, :as => :notable
end

с миграцией

create_table :notes do |t|
  t.references :notable, :polymorphic => {:default => 'Photo'}
end

Для получения подробной информации о полиморфной ассоциации, я бы предложил google

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...