是否有一种优雅的方式来更新模型关系?

时间:2013-02-05 01:32:21

标签: mysql ruby-on-rails database

我正在使用Ruby on Rails,但我也对一般解决方案感兴趣。假设我有一个模型用户,一个模型美食,以及一个连接两者的关系表,允许用户列出“最喜欢的美食”。向用户呈现所有美食的列表,并且可以单独检查或取消选中它们。例如,让我们说爱丽丝开始喜欢美国,印度和中国的食物。然后,她取消了中文并加入泰语并点击保存。什么是更新关系表的最佳方法?

我有三个解决方案,但由于这个操作似乎很常见,我希望有一个更优雅的解决方案。如果没有,那么标准的方法是什么?

  • 保留一组已添加和一组已删除,并确保它们没有重叠
  • 删除所有用户喜欢的食物并插入所选食物
  • 进行ajax调用以更新每个添加和删除

1 个答案:

答案 0 :(得分:0)

使用association_ids方法。而不是查找列表菜肴,然后将它们分配给用户,只需获取其ID列表并将其分配给user.cuisine_ids。保存记录将为您生成关联记录。由于您使用的是复选框,因此请注意用户取消选中所有内容然后保存的方案。通常会发生的事情是保存所选择的旧菜肴不会有任何变化。这可以通过添加nil隐藏值与复选框同名来轻松修复。