【问题标题】:Delete all unapproved posts with one click using Ruby on Rails使用 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"

标签: ruby-on-rails routes


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你的路线应该是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2015-04-09
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多