从has_many中删除对象但是不删除Rails中的原始记录?

val*_*alk 24 collections activerecord ruby-on-rails remove-if

我有这个:

Post.paragraphs << new_paragraph
Run Code Online (Sandbox Code Playgroud)

我需要通过id = 3删除段落,因此以下内容将完全删除记录:

Post.paragraphs.find(paragraph_id).destroy
# or
Post.paragraphs.find(paragraph_id).delete
Run Code Online (Sandbox Code Playgroud)

我只需要从has_many关联中删除一个段落.我试着用deletedestroy.两种方法都完全删除关联表中的记录.我怎样才能将它们从"容器"中删除?

Bal*_*ick 50

您不应该deleteParagraph对象上使用该方法,而是使用paragraphs关系的delete方法,如下所示:

post.paragraphs.delete(Paragraph.find(paragraph_id))
Run Code Online (Sandbox Code Playgroud)

  • 你可以省略`Paragraph`并使用`post.paragraphs.delete(paragraph_id)`.您可以传递`Fixnum`或`String`值,它会找到响应`id`的记录并对它们执行`delete`. (11认同)
  • @valk传递splat(*)数组来删除方法.类似于:`array = [1,2,3,4]`和现在`post.paragraphs.delete(*array)`[读一下](http://apidock.com/rails/ActiveRecord/Associations/CollectionProxy /删除) (4认同)