我正在使用Ruby on Rails,但我也对一般解决方案感兴趣。假设我有一个模型用户,一个模型美食,以及一个连接两者的关系表,允许用户列出“最喜欢的美食”。向用户呈现所有美食的列表,并且可以单独检查或取消选中它们。例如,让我们说爱丽丝开始喜欢美国,印度和中国的食物。然后,她取消了中文并加入泰语并点击保存。什么是更新关系表的最佳方法?
我有三个解决方案,但由于这个操作似乎很常见,我希望有一个更优雅的解决方案。如果没有,那么标准的方法是什么?
答案 0 :(得分:0)
使用association_ids
方法。而不是查找列表菜肴,然后将它们分配给用户,只需获取其ID列表并将其分配给user.cuisine_ids
。保存记录将为您生成关联记录。由于您使用的是复选框,因此请注意用户取消选中所有内容然后保存的方案。通常会发生的事情是保存所选择的旧菜肴不会有任何变化。这可以通过添加nil
隐藏值与复选框同名来轻松修复。