自定义 ActiveAdmin 范围以显示没有标签的书籍
Custom ActiveAdmin Scope to display books without a tag
我在 rails 应用程序中使用 ActiveAdmin。一切都很好,但现在我正在尝试创建一个可以显示没有标签的书籍的范围。
我在我的 Book 模型中创建了一个方法来帮助我执行此操作,但我无法在我的 ActiveAdmin 范围内使用它。
I keep getting
undefined method `book_tags?'
如何创建一个只显示没有标签的图书的范围?
型号
class Book < ActiveRecord::Base
has_many :book_mappings, dependent: :destroy
has_many :tags, through: :book_mappings
###Find books without a tag
def book_tags?
tags.any?
end
end
class BookMapping < ActiveRecord::Base
belongs_to :book
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :book_mappings, dependent: :destroy
has_many :books, through: :book_mappings
end
ActiveAdmin
ActiveAdmin.register Book do
###Scope to shows all Books
scope :all, :default => true
###book_tags? does now work, I keep getting undefined method `book_tags?'
scope :books_without_tags do |book|
book.book_tags?
end
end
它是未定义的,因为范围是 class 级别。 book
参数实际上是一个 ActiveRecord::Relation
。您可以在块中对其进行细化。您可以使用作用域甚至 class 方法。
你可以按照以下方式做一些事情:
class Book < AR::Base
scope :without_tags, -> { where.not(id: BookMapping.distinct.pluck(:book_id)) }
end
ActiveAdmin.register Book do
scope :all, default: true
scope :without_tags
end
我在 rails 应用程序中使用 ActiveAdmin。一切都很好,但现在我正在尝试创建一个可以显示没有标签的书籍的范围。
我在我的 Book 模型中创建了一个方法来帮助我执行此操作,但我无法在我的 ActiveAdmin 范围内使用它。
I keep getting
undefined method `book_tags?'
如何创建一个只显示没有标签的图书的范围?
型号
class Book < ActiveRecord::Base
has_many :book_mappings, dependent: :destroy
has_many :tags, through: :book_mappings
###Find books without a tag
def book_tags?
tags.any?
end
end
class BookMapping < ActiveRecord::Base
belongs_to :book
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :book_mappings, dependent: :destroy
has_many :books, through: :book_mappings
end
ActiveAdmin
ActiveAdmin.register Book do
###Scope to shows all Books
scope :all, :default => true
###book_tags? does now work, I keep getting undefined method `book_tags?'
scope :books_without_tags do |book|
book.book_tags?
end
end
它是未定义的,因为范围是 class 级别。 book
参数实际上是一个 ActiveRecord::Relation
。您可以在块中对其进行细化。您可以使用作用域甚至 class 方法。
你可以按照以下方式做一些事情:
class Book < AR::Base
scope :without_tags, -> { where.not(id: BookMapping.distinct.pluck(:book_id)) }
end
ActiveAdmin.register Book do
scope :all, default: true
scope :without_tags
end