#ruby-on-rails #activeadmin
Вопрос:
У меня есть модель 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
Можно ли использовать область модели внутри кода не для представления области или фильтров? с текущим кодом я получаю:
Ошибка nometoderror (неопределенный метод «приобретен» для #Книги:0x00007fa22ce65458):
Ответ №1:
Как acquired
и в случае с областью действия, вам придется написать:
if book.in?(Book.acquired)
Или
if book.status == 'acquired'
Комментарии:
1. Что в основном означает, что ActiveAdmin не поддерживает области AR
2. Я не понимаю вашего комментария. AA «поддерживает» их с помощью своего
scope
заявления dsl. Может быть, вы ожидали еще большего волшебства? Вы могли бы сделать удобный метод в своей моделиdef acquired
. Области в AR определяются наclass
уровне, а не на уровне экземпляра.3. Я ожидал того же поведения, что и в обычном классе Rails, что означает, что если у меня есть объект AR, я могу вызвать область действия для него. Если это «больше магии», то да, я ожидал большего «волшебства».