ruby-on-rails - references - rails has_many through example
¿Cómo elimino un solo elemento asociado HABTM sin eliminar el elemento en sí? (2)
Si desea eliminar varios elementos asociados, puede usar *
y escribir:
student.classes.delete(*classes_array)
¿Cómo se elimina un elemento asociado HABTM sin eliminar el elemento en sí?
Por ejemplo, supongamos que tengo 3 estudiantes que están en una clase de ciencias juntos. ¿Cómo elimino los objetos Science de la tabla StudentsClasses sin eliminar la referencia real de Science? Supongo que Student.Classes.first.delete
no es una buena idea.
Estoy usando JavaScript con arrastrar y soltar para agregar y quitar, no casillas de verificación. ¿Alguna idea?
Tiendo a usar has_many: a través, pero has probado
student.classes.delete(science)
Creo que la necesidad de tener el objeto de destino, no solo el ID, es una limitación de HABTM (ya que la tabla de unión se abstrae para su conveniencia). Si usa has_many: through puede operar directamente en la tabla de unión (ya que obtiene un Modelo) y eso le permite optimizar este tipo de cosas en menos consultas.
def leave_class(class_id)
ClassMembership.delete(:all, :conditions => ["student_id = ? and class_id = ?", self.id, class_id)
end
Si desea la simplicidad de HABTM, debe usar
student.classes.delete(Class.find 2)
Además, llamar a un modelo "Clase" es una muy mala idea. ¡Usa un nombre que no forme parte del núcleo de Ruby!