2009-07-07 74 views
39

如何在不刪除項目本身的情況下移除HABTM相關項目?如何刪除單個HABTM關聯商品而不刪除商品本身?

例如,假設我有3名學生在科學課上在一起。如何刪除ScienceClasses表中的Science對象而不刪除實際的科學參考?我猜0123,不是一個好主意。

我正在使用JavaScript進行拖放操作來添加和刪除,而不是複選框。有什麼想法嗎?

回答

57

我傾向於使用的has_many:通過,但你嘗試過

student.classes.delete(science) 

我認爲需要有目標對象,而不僅僅是ID,是HABTM的限制(因爲連接表被抽象掉爲了您的方便)。如果你使用has_many:通過你可以直接在連接表上操作(因爲你得到一個模型),並且可以讓你將這種事情優化成更少的查詢。

def leave_class(class_id) 
    ClassMembership.delete(:all, :conditions => ["student_id = ? and class_id = ?", self.id, class_id) 
end 

如果你想HABTM的簡單,你需要使用

student.classes.delete(Class.find 2) 

此外,調用模型「類」是一個非常糟糕的主意。使用不屬於Ruby核心的名稱!

+0

那麼它的方式目前正在建立,我必須使用PARAMS [:類標識碼]執行Class.find_by_id然後使用發現課堂要做到這一點。如果我只能說「Student.class_ids.remove [2]」,那將會很好。 – 2009-07-07 03:57:14

0

如果你想刪除多個相關聯的項目,你可以使用*寫:

student.classes.delete(*classes_array) 
相關問題