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

时间:2014-07-17 14:10:54

标签: 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_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>"

现在,当我用@comments_deleted取出两行时,一切都很好,帖子从我的数据库中删除,但属于那些帖子的所有评论仍然存在,我不想删除然后通过我每次删除帖子时都会发一下。

为什么我的应用程序不想删除属于注定帖子的所有评论? 任何人都可以向我解释一下吗?

4 个答案:

答案 0 :(得分:2)

您无法“删除”数组。您可以删除数组中的每条记录。

但如果用......替换两行,你可能会觉得更容易。

Main.delete_all("post_id = ?", params[:id])

和(@alibaba == 'false'

Main.delete_all("post_motivation_id = ?", params[:id])

答案 1 :(得分:1)

您可能希望使用destroy_all来确保删除记录,而不是使用delete_all。所以没有

Main.where(post_id: params[:id]).all, 

你应该让@comments_deleted成为

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

删除所有这些内容。

答案 2 :(得分:1)

如果您在has_many模型中有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

答案 3 :(得分:0)

  1. 首先,您使用Post.find(params [:id])检索要删除的帖子。
  2. 第二次,您使用@comment = @ post.comments.where(post_id:@ post.id)检索与您删除的帖子有关的所有注释,其中语句仅检索所有结果,而不是第一次出现。
  3. 最后,您循环这些注释并销毁它们。

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