如何删除内置资源?

时间:2013-11-19 00:27:53

标签: ruby-on-rails ruby

class Post < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :posts
end

我的问题是如何通过迭代删除构建的资源? 让我们说我有许多BUILT用户(尚未在数据库中)帖子。 如何删除特定帖子? 我尝试了这种方法,但是没有:

@user.posts.each {|post| post.delete if post.content.nil? }

当然它通过帖子,执行'删除'方法,但所有帖子都是他们在开头的地方......

3 个答案:

答案 0 :(得分:2)

由于您正在处理未提交到数据库的built个对象,因此destroy对象上的常规方法deletePost将无效。您必须直接处理@user.posts集合。

我通常使用这种方法:

@user.posts.each { |post| @user.posts.destroy(post) if post.content.nil? }

它在rails控制台上运行良好。

关于delete_alldestroy_all条件

这两种方法会派上用场,但它们是ActiveRecord::Relation域的一部分。 @user.posts集合是一个关联而不是关系,因此它只公开delete_all方法,没有条件。

如果你想使用它们,你应该尝试这样的事情:

 Post.delete_all(user_id: @user, content: nil)

答案 1 :(得分:2)

delete_all与条件

一起使用
@user.posts.delete_all("content IS NULL")

See here了解更多信息。

答案 2 :(得分:0)

您可以使用reset方法。它卸载关联。 Method API here

这将删除所有尚未提交到数据库的built对象:

@user.posts.reset
相关问题