ruby-on-rails - 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 的未定义方法“获取”):
解决方案
作为acquired
一个范围,你必须写:
if book.in?(Book.acquired)
或者
if book.status == 'acquired'
推荐阅读
- wordpress - 我们能否重做一个在 wordpress.org 上发布的插件,并为已在该站点上安装该插件的用户禁用更新
- batch-file - 使用 JQ 在 Windows shell 中通过子元素的内容过滤 JSON 的元素?
- android-studio - 生成签名的 APK - ClassNotFoundException:com.google.wireless.android.sdk.stats.IntellijIndexingStats$Index
- c# - 在标记为 APIController 的控制器上使用分页时返回不支持的媒体类型
- javascript - 未捕获的语法错误:输入意外结束,电子商务网站
- javascript - 在谷歌翻译器中重新加载语言更改页面
- python - 使用活动目录库时如何解决域问题?
- d3.js - 如何在过渡进行时获取 d3 元素的中间属性值?
- c# - 在 GridView 中未正确设置数据
- qliksense - 如何在 Anycharts Qlik 扩展中创建自定义主题