Ruby on Rails:我可以使用 ID 以外的 attributes/columns 删除记录吗?

Ruby on Rails: Can I delete records using attributes/columns other than ID?

我需要在 Heroku rails 控制台中删除几个博客 post,但我没有足够的经验去做这件事。

我可以在 url 中看到博客 post slug,我可以使用它的 slug 删除博客 posts 吗?如果是,怎么做?

这些博客的架构如下所示:

 create_table "blogs", force: :cascade do |t|
    t.string "title"
    t.text "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "slug"
    t.integer "status", default: 0
    t.bigint "topic_id"
    t.index ["slug"], name: "index_blogs_on_slug", unique: true
    t.index ["topic_id"], name: "index_blogs_on_topic_id"
  end

我也知道那些特定博客所属的 topic_id,这会帮助我识别和删除那些博客 post 吗?

通过第 1 步:Topic.find(18)、第 2 步:topic = Topic.find(18) 和第 3 步:topic.blogs.first,我能够识别主题中的博客。有什么方法可以删除第一个主题吗?

您可以同时使用两者来指代那些博客:

使用 slug:

list = ['slug1', 'slug2',..]
blogs = Blog.where(slug: list)
blogs.destroy_all

使用topic_id

list = ['topic1', 'topic2',..]
blogs = Blog.where(topic_id: list)
blogs.destroy_all

注意

  • 我认为通过 slug 的博客比 topic_id 更好,因为主题可能有更多您可能不想删除的博客。

  • 在任何情况下,删除前请先查看博客,因为它是不可逆的。