Предположит следующее:Rails 4: полиморфизм, однонаправленное наследование, область охвата ...?
class Customer < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :customer
end
Клиенты могут быть красными клиентами и/или голубыми клиентами, но они никогда не только клиентом. Красные покупатели собственных собак, голубые клиенты носят головные уборы (заказчик должен носить шляпу или владеть собакой). Для данного заказа red_customer равен never, равный blue_customer. Поскольку я никогда не использую client_id, я хочу исключить его из своей схемы и заменить его на red_customer_id и blue_customer_id. Каждый заказ имеет red_customer_id и blue_customer_id.
Примеры ...
- @ some_order.customer # нет, плохо, не хочу
- @ some_order.red_customer # возвращает объект
- пользователя @ some_order.blue_customer # возвращает объект пользователя
схемы (в настоящее время некрасиво)
create_table "orders"
t.string "name"
t.integer "user_id" # I want to get rid of this
t.integer "red_customer_id"
t.integer "blue_customer_id"
end
Но если я удалю user_id, мои ассоциации сломаются. Как я могу это очистить?
Спасибо за ваш вдумчивый ответ. Некоторые вопросы ... Customer.type может быть «красным», «синим» или «обоими» ...? Кроме того, для некоторых заказов клиент является красным, а по другим заказам тот же самый клиент является синим (см. Рисунок моих собак/шляп). Это означает, что тип зависит от порядка, который кажется немного запутанным. – brntsllvn
О, я вижу, я не понимаю, что они могут быть обоими. Да, это немного запутанный ха-ха. Я дам ему подумать и отредактировать свой ответ. – pedros
Цените свою помощь. Кто-то offline предложил использовать «как:» (в руководстве Rails для ассоциаций), но мне все еще трудно понять, как избавиться от избыточного user_id. – brntsllvn