Rails ActiveAdmin 如何在管理 after_create 块中使用模型范围

Rails ActiveAdmin how to use model scope inside admin after_create block

我有模型 Book,它有一个名为 status 的数据库列,定义的范围如下:

class Book < ApplicationRecord
  STATUSES = %w[planned acquired].freeze

  validates :status, inclusion: { in: STATUSES }

  scope :acquired, -> { where(status: 'acquired') }
end

现在在 ActiveAdmin 内部 admin/books.rb 我想使用该范围检查是否已获取书籍,如下所示:

ActiveAdmin.register Book do
  (...)

  after_create do |book|
    BookInfo.create!(book: book)
    BookCost.create!(book: book) if book.acquired
  end
end

是否可以在代码内部使用模型范围而不是用于范围视图或过滤器?使用当前代码我得到:

NoMethodError (undefined method `acquired' for #Book:0x00007fa22ce65458):

因为 acquired 是一个作用域,你必须写成:

if book.in?(Book.acquired)

或者

if book.status == 'acquired'