Я не думаю, что у вас плохой дизайн. Вероятно, не так уж много вариантов того, как это должно быть реализовано, но вы должны подумать о том, как вы хотите его использовать. Лично я бы не назвал модель Деталь , поскольку она ничего не говорит вам о том, что на самом деле модель. Что-то вроде HardwareConfiguration является более явным. Может быть, слишком долго, но вы можете сократить его до HardwareConfig или Configuration, в зависимости от вашего вкуса.
Эта модель должна иметь идентификатор и три внешних ключа. Также следует добавить индексы базы данных к каждому полю внешнего ключа.
class Detail < ActiveRecord::Base
belongs_to :keyboard
belongs_to :mouse
belongs_to :monitor
end
Тогда каждая аппаратная модель будет иметь _many: подробности вроде:
class Keyboard < ActiveRecord::Base
has_many :details
end
Вы можете посмотреть подробный комбо по его идентификатору или любой комбинации внешних ключей.
Detail.find(id)
Detail.find_all_by_keyboard_id(keyboard_id)