2

我必须从数据库中获取记录,经过一些验证后,如果自定义验证失败,我必须从对象中删除记录。

@posts = Post.all

在进行了一些业务逻辑验证之后,我不想只在 @posts 对象中保留 id 为 1 的帖子我如何才能从 @posts 对象中删除该帖子,而不是从数据库中删除。

4

2 回答 2

3

如果您确实想仅从 activerecord 结果数组而不是数据库中删除记录,请尝试此操作

#first convert the @post to array

@post.to_a.delete_if{|post| post.id == 1 }

这将删除 id = 1 的帖子(仅来自数组而不是数据库)

或者

#pass the object to delete

post = @post.first
@post.to_a.delete(post)

这将删除匹配的帖子(仅来自数组而不是数据库)

您也可以使用 Array#reject 但这会创建一个新数组,所以我使用上述解决方案。

+1的问题:)

于 2012-08-01T19:26:27.693 回答
2

您可以使用选择方法:

@posts.select do |post| 
  post.id == 1 
  #or any custom validation that returns true in case you want to keep the record 
end
于 2012-08-01T18:59:45.687 回答