Подтвердить что ты не робот

Как удалить один связанный элемент HABTM без удаления самого элемента?

Как удалить элемент, связанный с HABTM, без удаления самого элемента?

Например, скажем, у меня есть 3 ученика, которые вместе учатся в научном классе. Как удалить объекты Science из таблицы StudentsClasses, не удаляя фактическую ссылку Science? Я предполагаю, что Student.Classes.first.delete не очень хорошая идея.

Я использую JavaScript с перетаскиванием для добавления и удаления, а не флажков. Любые мысли?

4b9b3361

Ответ 1

Я использую has_many: через, но вы пробовали

student.classes.delete(science)

Я думаю, что для целевого объекта, а не только для идентификатора, это ограничение 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!

Ответ 2

Если вы хотите удалить несколько связанных элементов, вы можете использовать * и написать:

student.classes.delete(*classes_array)