使用has_and_belongs_to_many关系,我有以下内容:
model A
has_and_belongs_to_many :B, :join_table => "A_B"
has_and_belongs_to_many :C, :join_table => "A_B"
table A_B
A_id
B_id
C_id
当前行为:
当做A.save时,我在A_B表中得到2个插入语句 - 设置A_id,设置B_id,C_id = 0,另一个设置A_id和C_id全部(INSERT中没有B_id)声明)。因此,我的JOIN表中有2行
期望的行为:
在做A.save时,我想在A_B表中插入1个INSERT,其中所有3个ID都设置正确。
我该怎么做?
根据我的理解(因为我实际上没有权限更改db - legacy),我不能使用has_many:通过这个,因为JOIN表需要一个id列。如果不是这样,我愿意接受任何建议。
答案 0 :(得分:0)
您可以使用扩展方法执行此操作。您可能仍然可以获得数据库的2次访问,但其中一次可以是更新。
has_and_belongs_to_many :B, :join_table => "A_B" do
def save
abc = A.find_or_create_by_a_id(self.a_id)
abc.b = self.b
abc.save
end
end
has_and_belongs_to_many :C, :join_table => "A_B" do
def save
abc = A.find_or_create_by_a_id(self.a_id)
abc.c = self.c
abc.save
end
end
当然,您需要检查它是否是新记录并按照处理。不确定您是否可以在关联扩展名中重新定义保存....