Active Record,如何正确建立N-N关系?

问题描述

我在笔记本表和零件表之间有一个N-N关系。一个笔记本有很多零件,一个零件可以存在于许多笔记本中。这是模式的示例:

enter image description here

按照另一种方法,正如AJFaraday在评论中所建议的那样,我将拥有一个单一的连接表笔记本部件,该部件具有识别其gpu,处理器等的作用:

enter image description here

如何使用方法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

然后将其用作您认为必要的其他任何角色,或者考虑一些元编程循环为您创建这些列表。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...