2014-09-04 97 views
14

我有這樣的:從has_many中刪除對象,但不要刪除Rails中的原始記錄?

Post.paragraphs << new_paragraph 

我需要通過ID = 3,除去款,所以下面完全刪除記錄:

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

我只需要移除的has_many關聯一個段落。我試圖使用deletedestroy。兩種方法都完全刪除相關表中的記錄。我怎樣才能從「容器」中刪除它們?

+0

請注意,我忘了刪除依賴:摧毀。無論如何,下面的答案是偉大的。 – valk 2014-09-04 08:42:34

回答

32

你不應該使用Paragraph對象的delete方法,而是使用delete方法paragraphs關係,是這樣的:

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

你可以省略'Paragraph'並使用'post.paragraphs.delete(paragraph_id)'。你可以傳遞'Fixnum'或'String'值,它找到了對'id'的響應並對它們執行'delete'。 – 2014-09-04 08:29:17

+1

@Зелёный有沒有辦法使它與ID數組一起工作? – valk 2014-09-04 08:34:12

+3

@valk通過圖示(*)數組刪除方法。例如:'array = [1,2,3,4]',現在'post.paragraphs.delete(* array)'[read about it](http://apidock.com/rails/ActiveRecord/Associations/CollectionProxy /刪除) – 2014-09-04 08:36:31