through references rails many how has_many has_and_belongs_to_many has example create belongs and ruby-on-rails associations has-and-belongs-to-many

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!