我需要在ActiveAdmin视图中对列进行排序/过滤。该列是子对象的计数。具体来说,模型看起来像:
class Location < ActiveRecord::Base
...
has_many :things
...
ActiveAdmin页面需要有一个列,我喜欢这个:
column 'Thing Count', :sortable => 'Thing Count' do |location|
location.things.length
end
然而,排序实际上并不起作用,我也无法找到一种方法来进行过滤工作。我尝试了几种变体:
:filter 'Thing Count'
没有成功。有没有人成功获得ActiveAdmin来对子对象的count列进行排序或过滤?如果是这样的话?谢谢!
答案 0 :(得分:1)
ActiveAdmin只能对数据库列进行过滤。
您可以执行以下操作:
belongs_to
侧/ Thing模型上创建counter_cache列。filter :things_count
示例:
def up
add_column :projects, :tasks_count, :integer, :default => 0
Project.reset_column_information
Project.find(:all).each do |p|
Project.update_counters p.id, :tasks_count => p.tasks.length
end
end
def down
remove_column :projects, :tasks_count
end
答案 1 :(得分:0)
class Location
has_many :things
def self.all_things
joins(:things).select("locations.id as loc_id, count(things.*) as count").group("locations.id").order("count(things.*)")
end
end