I have situation where a single model needs to have three foreign ids. This table has the information which belongs to three models.
e.g. –
Three models – Keyboard, Mouse, Monitor
Now i have fourth model details – which has information about what will happen for any combination like keyboard1, mouse1 and monitor1.
So what should be good design pattern for this ?
Right now what i use is Detail.find_by_keyboard_id_and_mouse_id_and_monitor_id(keyboard1id, mouse1id, monitor1id) #=> Detail1
Which of course is not a best way to go…
I don’t think what you have is a bad design. There probably aren’t too many options for how this should be implemented, but you should think about how you want to use it. Personally, I wouldn’t call the model Detail since it doesn’t tell you anything about what the model really is. Something like HardwareConfiguration is more explicit. Maybe too lengthy, but you could shorten it to HardwareConfig or Configuration, depending on your taste.
This model should have an id and the three foreign keys. You should add database indexes to each foreign key field as well.
Then each hardware model would have_many :details like:
You could look up the detail combo by its ID, or any combination of foreign keys.