Database Rails 4删除属于某个帖子的评论

Database Rails 4删除属于某个帖子的评论,database,ruby-on-rails-4,Database,Ruby On Rails 4,我有问题删除所有评论属于一个帖子,也将被删除 def delete_post @alibaba = params[:alibaba] if @alibaba == "true" @to_delete_post = Post.find(params[:id]) @comments_deleted = Main.where(post_id: params[:id]).all @comments_deleted.destroy @to

我有问题删除所有评论属于一个帖子,也将被删除

  def delete_post
    @alibaba = params[:alibaba]
    if @alibaba == "true"
      @to_delete_post = Post.find(params[:id])
      @comments_deleted = Main.where(post_id: params[:id]).all
      @comments_deleted.destroy
      @to_delete_post.destroy
      redirect_to admin_path
    elsif @alibaba == "false"
      @to_delete_post = PostMotivation.find(params[:id])
      @comments_deleted = Main.where(post_motivation_id: params[:id]).all
      @comments_deteled.destroy
      @to_delete_post.destroy
      redirect_to admin_path
    end
  end
现在,当我运行上述代码时,我有一个错误:

undefined method `destroy' for #<Array:0x007fb9900654b8>"
未定义的#的方法“destroy”
现在,当我用@comments\u deleted删除两行内容时,一切都很好,帖子从我的数据库中删除了,但属于该帖子的所有评论仍然存在,我不想每次删除帖子时都手动删除

为什么我的应用程序不想删除属于某篇文章的所有评论? 有人能给我解释一下吗?

你不能“删除”数组。你可以删除数组中的每条记录

但是如果你把这两条线换成

Main.delete_all("post_id = ?", params[:id])
和(在
@alibaba==“false”
上)

不能“删除”数组。可以删除数组中的每条记录

但是如果你把这两条线换成

Main.delete_all("post_id = ?", params[:id])
和(在
@alibaba==“false”
上)


您可能希望使用destroy\u all来确保记录被删除,而不是使用delete\u all

Main.where(post_id: params[:id]).all, 
您应该将@comments\u删除,以便

Main.where("post_id = ?", params[:id]) and do @comments_deleted.destroy_all 

删除所有记录。

您可能希望使用destroy\u all来确保记录已删除,而不是使用delete\u all

Main.where(post_id: params[:id]).all, 
您应该将@comments\u删除,以便

Main.where("post_id = ?", params[:id]) and do @comments_deleted.destroy_all 

要删除所有注释。

如果在
Post
模型中有一个关系
有许多
,则可以设置一个
dependent
选项来删除所有相关注释

has_many :comments, dependent: :destroy
这样可以简化功能:

def delete_post
  if params[:alibaba]
    Post.find(params[:id]).destroy
  else
    PostMotivation.find(params[:id]).destroy
  end
  redirect_to admin_path
end

如果在
Post
模型中有一个关系
has\u many
,您可以设置一个
dependent
选项来删除所有相关的注释

has_many :comments, dependent: :destroy
这样可以简化功能:

def delete_post
  if params[:alibaba]
    Post.find(params[:id]).destroy
  else
    PostMotivation.find(params[:id]).destroy
  end
  redirect_to admin_path
end
  • 首先,使用Post.find(params[:id])检索要删除的帖子
  • 其次,使用@comment=@post.comments.where(post_id:@post.id)检索与删除的帖子相关的所有评论,其中station检索所有结果,而不仅仅是第一次出现的结果
  • 最后,循环这些注释并销毁它们

    @post = Post.find(params[:id])
    @comment = @post.comments.where(post_id: @post.id) 
    @comment.each do |comment|
        comment.destroy
    end
    
  • 首先,使用Post.find(params[:id])检索要删除的帖子
  • 其次,使用@comment=@post.comments.where(post_id:@post.id)检索与删除的帖子相关的所有评论,其中station检索所有结果,而不仅仅是第一次出现的结果
  • 最后,循环这些注释并销毁它们

    @post = Post.find(params[:id])
    @comment = @post.comments.where(post_id: @post.id) 
    @comment.each do |comment|
        comment.destroy
    end
    

  • 您是否在Post模型中编写了多条注释,:dependent=>:destroy您是否在Post模型中编写了多条注释,:dependent=>:destroy