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? }
当然它通过帖子,执行'删除'方法,但所有帖子都是他们在开头的地方......
答案 0 :(得分:2)
由于您正在处理未提交到数据库的built
个对象,因此destroy
对象上的常规方法delete
,Post
将无效。您必须直接处理@user.posts
集合。
我通常使用这种方法:
@user.posts.each { |post| @user.posts.destroy(post) if post.content.nil? }
它在rails控制台上运行良好。
delete_all
和destroy_all
条件这两种方法会派上用场,但它们是ActiveRecord::Relation
域的一部分。 @user.posts
集合是一个关联而不是关系,因此它只公开delete_all
方法,没有条件。
如果你想使用它们,你应该尝试这样的事情:
Post.delete_all(user_id: @user, content: nil)
答案 1 :(得分:2)
答案 2 :(得分:0)