首页 > 解决方案 > Rails ActiveAdmin 如何在 admin after_create 块中使用模型范围

问题描述

我有一个模型Book,它有一个名为的 db 列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(#Book:0x00007fa22ce65458 的未定义方法“获取”):

标签: ruby-on-railsactiveadmin

解决方案


作为acquired一个范围,你必须写:

if book.in?(Book.acquired)

或者

if book.status == 'acquired'

推荐阅读