1

我正在使用 Ruby on Rails,但也对通用解决方案感兴趣。假设我有一个模型用户、一个模型菜系和一个连接两者的关系表,允许用户拥有一个“最喜欢的菜系”列表。用户会看到所有美食的列表,并且可以单独选中或取消选中它们。例如,假设 Alice 开始喜欢美国、印度和中国食物。然后她取消选中中文并添加泰语并点击保存。更新关系表的最佳方法是什么?

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

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

1 回答 1

0

使用association_ids方法。无需查找美食列表然后将其分配给用户,只需获取他们的 id 列表并将其分配给user.cuisine_ids. 保存记录将为您生成关联记录。由于您使用的是复选框,因此请注意用户取消选中所有内容然后保存的情况。通常发生的情况是没有保存任何更改,保持选择旧的选定菜系。这可以通过添加nil与复选框同名的隐藏值来轻松解决。

于 2013-02-05T01:44:59.550 回答