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'
我有模型 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'