问题描述
我在笔记本表和零件表之间有一个N-N关系。一个笔记本有很多零件,一个零件可以存在于许多笔记本中。这是模式的示例:
按照另一种方法,正如AJFaraday在评论中所建议的那样,我将拥有一个单一的连接表笔记本部件,该部件具有识别其gpu,处理器等的作用:
如何使用方法2在Rails中调用notebook.processor,notebook.gpu
等?而且,由于某些笔记本电脑没有专用的GPU,或者可能只有ssd而没有hd等,因此我还需要保留一些空白部分。
模型的关系应该如何?
解决方法
只需为联接表创建一个模型,然后在两个模型中对其进行引用。
# models/notebook_part.rb
class NotebookPart
belongs_to :notebook
belongs_to :part
end
# models/part.rb
class Part
has_many :notebook_parts
has_many :notebooks,though: :notebook_parts
end
# models/notebook.rb
class Notebook
has_many :notebook_parts
has_many :parts,though: :notebook_parts
end
然后在笔记本模型中,您可以基于零件角色创建方法,例如:
# models/notebook.rb
def processors
parts.where(part_role: :processor)
end
然后将其用作您认为必要的其他任何角色,或者考虑一些元编程循环为您创建这些列表。