我在删除属于即将删除的帖子的所有评论时遇到问题。
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取出两行时,一切都很好,帖子从我的数据库中删除,但属于那些帖子的所有评论仍然存在,我不想删除然后通过我每次删除帖子时都会发一下。
为什么我的应用程序不想删除属于注定帖子的所有评论? 任何人都可以向我解释一下吗?
答案 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)
最后,您循环这些注释并销毁它们。
@post = Post.find(params[:id])
@comment = @post.comments.where(post_id: @post.id)
@comment.each do |comment|
comment.destroy
end