2013-02-05 231 views
1

我正在使用Ruby on Rails,但我也对一般解决方案感兴趣。比方说,我有一个模特用户,一个模特美食和一个连接两者的关系表,允许用户列出“最喜爱的菜肴”。向用户呈现所有菜肴的列表,并可单独检查或取消选中它们。比如说,爱丽丝开始喜欢美国,印度和中国的食物。然后,她取消中文选择,并添加泰文并保存。什么是更新关系表的最好方法?有没有一种更新模型关系的优雅方法?

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

  • 保持一组添加和一组去掉,并确保他们有没有重叠
  • 删除所有用户喜爱的食物,并插入选定的
  • 使得Ajax调用来更新每个单独的添加并删除

回答

0

使用association_ids的方法。而不是寻找一个列表美食,然后分配给用户,只需获得他们的ID列表,并将其分配到user.cuisine_ids。保存该记录将为您生成关联记录。由于您使用了复选框,因此请谨慎对待用户取消选中所有内容然后保存的情况。通常发生的事情是没有改变是保存选择的旧选择的菜肴。通过添加一个与复选框同名的隐藏值nil可以很容易地解决这个问题。

相关问题