2010-08-30 25 views
9

Je me confondre maintenant, je ne sais pas comment supprimer/détruire un enregistrement dans une table de jointure:Dans les rails, comment détruire un 'élément de table jointe' sans supprimer l'enregistrement réel?


class Task < ActiveRecord::Base 
    belongs_to :schema 
    belongs_to :to_do 
end 

class Todo < ActiveRecord::Base 
    belongs_to :schema 
    has_many :tasks 
end 

class Shcema < AcitveRecord::Base 
    has_many :todos 
    has_many :tasks, :through => :todos 
end 

>> sc = Schema.new 
>> sc.tasks << Task.new 
>> sc.tasks << Task.new 
>> sc.tasks << Task.new 
... 
>> sc.tasks.delete(Task.first) # I just want to delete/destroy the join item here. 
# But that deleted/destroyed the Task.first. 

Que puis-je faire si je viens vouloir détruire l'élément de relation?

Répondre

6

Si vous voulez supprimer toutes les tâches en sc:

sc.tasks.delete_all 

Si vous souhaitez supprimer une tâche spécifique sc:

sc.tasks.delete_at(x) where x is the index of the task 

or 

sc.tasks.delete(Task.find(x)) where x is the id of Task 

J'espère que cela aide.

1

Si vous voulez supprimer tous les enregistrements de table de jointure comme amenities_lodgings sans utiliser un objet, vous pouvez utiliser:

ActiveRecord::Base.connection.execute("DELETE from amenities_lodgings")