开发者

Rails active record model relationship - one model belonging to three models

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 co开发者_如何学Cmbination 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.

class Detail < ActiveRecord::Base
  belongs_to :keyboard
  belongs_to :mouse
  belongs_to :monitor
end

Then each hardware model would have_many :details like:

class Keyboard < ActiveRecord::Base
  has_many :details
end

You could look up the detail combo by its ID, or any combination of foreign keys.

Detail.find(id)
Detail.find_all_by_keyboard_id(keyboard_id)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜