rails active active嵌套有很多关联

时间:2018-01-11 01:42:47

标签: ruby-on-rails activerecord

我遇到了数据库设计问题,有人可能指出了正确的方向。

通过Vehicle,Cylinders,InventoryItems之间的关系,我有了很多东西。

气缸有很多要求。到目前为止,一切运作良好。

from IPython.display import display
import pandas as pd
df = pd.DataFrame({'a':[1,2],'b':[3,4]})
while(True):
    a = input("please input:\n")
    display(df.head())
    print (a)

当前样本数据

车辆

class Vehicle < ApplicationRecord
  has_many :inventory_items
  has_many :cylinders, through: :inventory_items
end

class InventoryItem < ApplicationRecord
  belongs_to :vehicle
  belongs_to :cylinder
end

class Cylinder < ApplicationRecord
  has_many :inventory_items
  has_many :vehicles, through: :inventory_items
  has_many :requirements
end

气缸

id vehicle_type_id year  make   model
1  3               1999  honda  acccord
2  3               2017  toyota corolla
3  3               2010  ford   fiesta

InvetoryItem

id name 
1  v2
2  v4
3  v6
4  v8

要求

id vehicle_id cylinder_id

1  1          2
2  1          3
3  2          1
4  2          2
5  2          3
6  2          4
7  3          2 

但我想将此更改为基于车辆的气缸更换要求。如果cylinder.requirements值取决于车辆价值。

例如

在车辆 - 汽车环境中

Cylinder.find(1).requirements是项目#1000 在车辆 - 范上下文

Cylinder.find(1).requirements是项目#189

Requirement.new(:cylynder_id =&gt; 1,:vehicle_id =&gt; 1,:item_id =&gt; 1000).save

Requirement.new(:cylynder_id =&gt; 1,:vehicle_id =&gt; 2:item_id =&gt; 189).save 我怎么能解决这个问题,请帮帮我?

2 个答案:

答案 0 :(得分:0)

我确信这不是一个新的挑战,但是面对同样的情况,你在多对多关系协会中有两个选择就是使用 1. has_and_belongs_to_many当你不需要两个模特之间的直接关系而且与加入模型没有任何关系 2. has_many_through当你需要用关系模型做其他事情时,例如验证,回调,添加额外的属性等。 在您的情况下,它看起来像汽缸通过车辆有很多要求。您可能需要验证您的需求模型。因此,通过汽缸,要求和车辆之间的关系,我将会做的另一件事。变得复杂但它就是这样 - 我的两分钱!

答案 1 :(得分:0)

首先通过命名rails的约定,many_to_many关联中间表名应该是

CylinderVehicle

Quote

  

除非使用。明确指定了连接表的名称   :join_table选项,Active Record通过使用创建名称   类名的词法顺序。所以Cylinder和Vehicle之间的联系   模型将提供默认的连接表名称“CylinderVehicle”   因为“C”在词汇排序中超过“V”。