我遇到了数据库设计问题,有人可能指出了正确的方向。
通过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 我怎么能解决这个问题,请帮帮我?
答案 0 :(得分:0)
我确信这不是一个新的挑战,但是面对同样的情况,你在多对多关系协会中有两个选择就是使用 1. has_and_belongs_to_many当你不需要两个模特之间的直接关系而且与加入模型没有任何关系 2. has_many_through当你需要用关系模型做其他事情时,例如验证,回调,添加额外的属性等。 在您的情况下,它看起来像汽缸通过车辆有很多要求。您可能需要验证您的需求模型。因此,通过汽缸,要求和车辆之间的关系,我将会做的另一件事。变得复杂但它就是这样 - 我的两分钱!
答案 1 :(得分:0)
首先通过命名rails的约定,many_to_many关联中间表名应该是
CylinderVehicle
除非使用。明确指定了连接表的名称 :join_table选项,Active Record通过使用创建名称 类名的词法顺序。所以Cylinder和Vehicle之间的联系 模型将提供默认的连接表名称“CylinderVehicle” 因为“C”在词汇排序中超过“V”。