модели рельсов - две таблицы имеют одинаковые поля первичного и внешнего ключей - PullRequest
0 голосов
/ 24 июля 2010

Я использую существующую базу данных с приложением rails.

Я не могу изменить имена таблиц или столбцов.

Допустим, первая таблица - это "счета-фактуры", а вторая - "заказы"

у них обоих есть первичный ключ, который называется одним и тем же, скажем, "order_id"

Счета могут найти свой заказ, посмотрев на первичный ключ "order_id" в таблице заказов.

И наоборот для заказа, находящего его счет.

Счета могут иметь, но не всегда, один заказ (вам может быть выставлен счет за что-то кроме заказа, например, «work_order», который можно найти, посмотрев «order_id» в позиции первичного ключа «"work_orders". Таким образом, в накладных может быть work_order или заказ.

у заказов всегда есть счет. work_orders всегда имеет счет

Я пытаюсь выяснить классы в моделях.

Вы устанавливаете первичный и внешний ключи на одно и то же? Как насчет own_to? Способ установки этой БД, на самом деле ничему не принадлежит, они просто ссылаются друг на друга с помощью того же значения "order_id".как это?

class Invoice < ActiveRecord::Base
    set_primary_key(:order_id)
    set_foreign_key(:order_id)
end

- snip -

class Order < ActiveRecord::Base
    set_primary_key(:order_id)
    set_foreign_key(:order_id)
end

... И то же самое для рабочего задания.

class WorkOrder < ActiveRecord::Base
    set_primary_key(:order_id)
    set_foreign_key(:order_id)
end

Это правильно?Кажется, это дурацкий способ сделать это, но эта БД ужасна.

А как насчет всего, что относится к папке?

Дайте мне знать, если я что-то пропустил.

Спасибо!

1 Ответ

0 голосов
/ 05 апреля 2011

Я полагаю, что ответ может быть:

class Order < ActiveRecord::Base
    set_primary_key(:order_id)
    belongs_to :invoice, :foreign_key => :order_id
end

class WorkOrder < ActiveRecord::Base
    set_primary_key(:order_id)
    belongs_to :invoice, :foreign_key => :order_id
end

class Invoice < ActiveRecord::Base
    set_primary_key(:order_id)
    has_one :work_order
    has_one :order
end

Хотя я не совсем уверен, что ваш первичный ключ также может быть внешним (я тоже новичок в Rails)

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