2014-09-04 5 views
14

Ich habe dies:Objekt aus has_many entfernen, aber den ursprünglichen Datensatz in Rails nicht löschen?

Post.paragraphs << new_paragraph 

Und ich brauche Absatz zu entfernen, indem id = 3, so dass die folgenden löscht den Datensatz vollständig:

Post.paragraphs.find(paragraph_id).destroy 
# or 
Post.paragraphs.find(paragraph_id).delete 

Ich muss nur einen Absatz von has_many Vereinigung entfernen. Ich habe versucht, delete und destroy zu verwenden. Beide Methoden löschen Datensätze vollständig aus den zugeordneten Tabellen. Wie kann ich sie einfach aus dem "Container" entfernen?

+0

Bitte beachten Sie, dass ich die abhängig entfernen vergessen: zerstören. Wie auch immer, die Antworten unten sind großartig. – valk

Antwort

32

Sie sollten nicht die delete Methode auf dem Paragraph Objekt verwenden, sondern die Löschmethode paragraphs Beziehung verwenden, wie folgt aus:

post.paragraphs.delete(Paragraph.find(paragraph_id)) 
+6

können Sie 'Paragraph' weglassen und' post.paragraphs.delete (paragraph_id) 'verwenden. Sie können 'Fixnum'- oder' String'-Werte übergeben, es findet die Datensätze, die auf die 'id' reagieren, und führt' delete' auf ihnen aus. –

+1

@ Зелёный gibt es eine Möglichkeit, es mit einem Array von IDs arbeiten zu lassen? – valk

+3

@valk pass splat (*) Array zum Löschen der Methode. So etwas wie: 'array = [1,2,3,4]' und jetzt 'post.paragraphs.delete (* array)' [lies darüber] (http://apidock.com/rails/ActiveRecord/Associations/CollectionProxy/löschen) –

Verwandte Themen