使用 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"
状态删除所有未批准的帖子。由于一些垃圾邮件问题,我通常有数百个帖子。我一直在尝试如下,但似乎无法让路线适用于不适用于特定帖子的操作。
manage_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 一键删除所有未批准的帖子的主要内容,如果未能解决你的问题,请参考以下文章