Ruby on rails Rails ActiveAdmin如何在创建块后在管理中使用模型作用域

Ruby on rails Rails ActiveAdmin如何在创建块后在管理中使用模型作用域,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,我有一本modelBook,它有一个db列,名为status,定义范围如下: class Book < ApplicationRecord STATUSES = %w[planned acquired].freeze validates :status, inclusion: { in: STATUSES } scope :acquired, -> { where(status: 'acquired') } end ActiveAdmin.register Book

我有一本model
Book
,它有一个db列,名为
status
,定义范围如下:

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

  validates :status, inclusion: { in: STATUSES }

  scope :acquired, -> { where(status: 'acquired') }
end
ActiveAdmin.register Book do
  (...)

  after_create do |book|
    BookInfo.create!(book: book)
    BookCost.create!(book: book) if book.acquired
  end
end
是否可以在代码内部使用模型作用域而不用于范围视图或过滤器?根据当前代码,我得到:

NoMethodError(未定义的#Book:0x00007fa22ce65458的“获取”方法):


由于
acquired
是一个范围,您必须编写:

if book.in?(Book.acquired)


这基本上意味着ActiveAdmin不支持AR范围。我不理解你的评论。AA确实通过其
scope
dsl语句“支持”它们。也许你期待更多的魔法?您可以在您的模型中创建一个方便的方法
def-acquired
。AR中的作用域是在
级别上定义的,而不是在实例级别。我期望的行为与常规Rails类中的行为相同,这意味着如果我有一个AR对象,我可以对其调用作用域。如果这是“更神奇”,那么是的,我期待更多的“神奇”。
if book.status == 'acquired'