使用 Ruby on Rails 一键删除所有未批准的帖子

Posted

技术标签:

【中文标题】使用 Ruby on Rails 一键删除所有未批准的帖子【英文标题】:Delete all unapproved posts with one click using Ruby on Rails 【发布时间】:2021-09-29 10:30:34 【问题描述】:

我正在尝试添加一个按钮,用于根据t.boolean "is_approved" 状态删除所有未批准的帖子。由于一些垃圾邮件问题,我通常有数百个帖子。我一直在尝试如下,但似乎无法让路线适用于不适用于特定帖子的操作。


ma​​nage_posts.html.erb

<p><%= link_to 'delete all unapproved', destroy_unapproved_posts_url, method: :delete, data:  confirm: 'Are you sure?' , class: "btn-admin-action" %></p>

posts_controller.rb

  def destroy_unapproved
    Post.where(is_approved != true).destroy_all

    respond_to do |format|
      format.html  redirect_to manage_posts_url, notice: 'Unapproved Posts are destroyed.' 
      format.json  head :no_content 
    end
  end

routes.rb

  resources :posts do
    member do
      put 'destroy_unapproved', to: "posts#destroy_unapproved"
    end
  end

【问题讨论】:

当您发送delete 请求时,为什么要put 'destroy_unapproved', to: "posts#destroy_unapproved"?在路由文件中应该是delete 'destroy_unapproved', to: "posts#destroy_unapproved" 【参考方案1】:

您需要在此处定义collection route,而不是您已定义的member route。

成员路由用于处理资源的特定成员,而集合路由不需要 URL 中任何成员的 id,并且可以作为一个整体处理资源。

此外,正如 Deepesh 在对原始帖子的评论中提到的,我还建议将路线从 put 更改为 delete

【讨论】:

【参考方案2】:

你的路线应该是

  resources :posts do
    collection do
      delete 'destroy_unapproved'
    end
  end

【讨论】:

以上是关于使用 Ruby on Rails 一键删除所有未批准的帖子的主要内容,如果未能解决你的问题,请参考以下文章

ruby on rails on windows

无法使用 Ruby on rails 删除表中的项目

从 ruby​​ on rails 中删除 new.haml/new.erb?

Ruby on Rails 登录

清除或重新创建 Ruby on Rails 数据库

在 Ruby on Rails 中使用 <%= %> 时如何删除周围的引号 (")?