在Rails中,使用HABTM,如何避免连接表中的多个INSERT
使用 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 时,我想要 1 INSERT 到 A_B 表中,其中所有 3 个 id 均已正确设置。
我该怎么做?
根据我的理解(因为我实际上无权更改数据库 - 遗留),我不能对此使用 has_many :through ,因为 JOIN 表需要 id 列。如果情况并非如此,我愿意接受任何建议。
Using a has_and_belongs_to_many relationship, I have the following:
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
Current behavior:
when doing A.save, I get 2 insert statements into the A_B table - A_id is set, B_id, is set, and C_id = 0, and the other where all only A_id and C_id are set (no B_id in the INSERT statement). Therefore, there are 2 rows in my JOIN table
Desired behavior:
when doing A.save, I want 1 INSERT into A_B table, where all 3 ids are set correctly.
How do I do this?
From my understanding (as I don't really have access to change the db - legacy), I can't use has_many :through on this, as the JOIN table would require an id column. If that is not true, I am open to any suggestions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您也许可以使用扩展方法来做到这一点。您可能仍然会访问数据库 2 次,但其中一次可能是更新。
当然,您需要检查是否是新记录并进行相应处理。不确定您是否可以在关联扩展中重新定义保存......
You might be able to do this with an extension method. You'd probably still get the 2 trips to the DB, but one can be an update.
Of course, you need to check if it's a new record and handle according. Not sure if you can redefine save in an association extension....