2013-02-05 416 views
1

我正在使用Ruby on Rails,但我也對一般解決方案感興趣。比方說,我有一個模特用戶,一個模特美食和一個連接兩者的關係表,允許用戶列出「最喜愛的菜餚」。向用戶呈現所有菜餚的列表,並可單獨檢查或取消選中它們。比如說,愛麗絲開始喜歡美國,印度和中國的食物。然後,她取消中文選擇,並添加泰文並保存。什麼是更新關係表的最好方法?有沒有一種更新模型關係的優雅方法?

我有三個解決方案,但由於這個操作看起來很常見,所以我希望有一個更優雅的解決方案。如果沒有,那麼執行此操作的標準方法是什麼?

  • 保持一組添加和一組去掉,並確保他們有沒有重疊
  • 刪除所有用戶喜愛的食物,並插入選定的
  • 使得Ajax調用來更新每個單獨的添加並刪除

回答

0

使用association_ids的方法。而不是尋找一個列表美食,然後分配給用戶,只需獲得他們的ID列表,並將其分配到user.cuisine_ids。保存該記錄將爲您生成關聯記錄。由於您使用了複選框,因此請謹慎對待用戶取消選中所有內容然後保存的情況。通常發生的事情是沒有改變是保存選擇的舊選擇的菜餚。通過添加一個與複選框同名的隱藏值nil可以很容易地解決這個問題。

相關問題