Какая ассоциация активных записей больше подходит для этих моделей? - PullRequest
0 голосов
/ 21 февраля 2012

Я читал об ассоциациях Active Record в RailGuides и нашел это очень информативным, но мне определенно нужна помощь в понимании некоторых вариантов.Все еще учусь.

У меня есть модель клиента со следующими атрибутами:

name
birth_date
address1
etc

Затем модель контракта со следующими атрибутами:

auth_num
start_date
end_date
client_id .... I think I need this here for the new contract form

Также модель кодас этими атрибутами:

code_name
status
description

У меня есть таблица соединений ClientLines с этими атрибутами:

Contract_id
Client_id

И таблица соединений CodeLines с этими атрибутами:

Contract_id
Code_id
Client_id
Units_Alloc   ... each contract might use a combination of codes some of which are 
                  the same in other contracts but they have different number of units 
                  allocated.

У меня возникает соблазн использовать Полиморфную ассоциацию, потому что модель Контракта связана с моделью клиента и моделью кода, но я не достаточно уверена, чтобы пойти дальше и настроить это без предварительной проверки, не желает ли кто-нибудь дать мне некоторые рекомендации попримеры, которые я перечислил?

Моя надежда на руководство лежит вокруг этих вопросов.

Является ли полиморфная ассоциация лучшим выбором для примера моделей, которые я перечислил выше?Контракты используют разные комбинации кодов, но некоторые из кодов одинаковы в других контрактах, единственное отличие заключается в количестве всех единицocated, у меня есть единицы, выделенные в правильной таблице?(По сути, я не знаю, куда поместить единицы размещения?)

Когда я настраиваю форму ввода данных так, чтобы я мог заключать новые контракты, которые будут извлекать определенные атрибуты из клиентской таблицы и кодовой таблицы,уместно ли указывать Client_id в качестве одного из атрибутов модели Контракта, и, конечно, атрибуты Unit alloc все еще кажется мне серьезным проблемой, откуда мне его взять?

Любая помощь или указателибыло бы очень полезно.

Спасибо.

1 Ответ

0 голосов
/ 21 февраля 2012

Хорошо, я попробую :) 1001 *

Я понимаю, что мы пришли из Контракта, который подписан одним клиентом и о каких-то "Кодах". Так что это может пойти так:

class Contract < ActiveRecord::Base
has_one :client
has_many :codes
end

class Client < ActiveRecord::Base
belongs_to :contract
end

class Code < ActiveRecord::Base
belongs_to :contract
end

Где вы храните contract_id в таблице клиентов и в таблице кодов. Затем вы можете выполнять операции AR, такие как:

contract = Contact.find_by_auth_num(1234)
contract.client #gets you the client
contract.codes #gets you contracted codes
contract.codes.count #gets you number of contracted codes

Или, если вы хотите, чтобы это было более изощренным, вы можете изменить отношение на

class Contract < ActiveRecord::Base
has_one :client
has_many :contract_codes
has_many :codes, :through => :contract_codes
end

class Code < ActiveRecord::Base
has_many :contract_codes
has_many :contracts, :through => :contract_codes
end

с промежуточной моделью

ContractCode < ActiveRecord::Base
belongs_to :code
belongs_to :contract
end

где вы можете хранить количество кодов в специальном столбце. Конечно, все эти декларации должны быть подкреплены правильной миграцией :) Я что-то прояснил?

...