我正在尝试使用https://github.com/activeadmin/activeadmin/blob/master/docs/3-index-pages/index-as-table.md#custom-sorting中所述的“自定义排序”功能,但似乎无法在非常简单的情况下使用它。我的代码的存储库位于:https://github.com/newton10471/active_admin_custom_sorting。对于它的价值,我使用的是旧版本的Rails(4.2.5)和Active Admin(1.1.0)。
在上述回购中,我的AdminUser模型如下所示:
class AdminUser < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :validatable
has_many :gold_stars
end
我的GoldStar模型看起来像这样:
class GoldStar < ActiveRecord::Base
validates :admin_user_id, presence: true
belongs_to :admin_user
end
我希望能够在“金星”列上进行排序,该列是每个AdminUser获得的金星数量的计数。
我在app / admin / admin_user.rb中使用自定义排序的尝试如下:
order_by(:gold_stars) do |order_clause|
['COUNT(gold_stars.id)', order_clause.to_sql].join(' ')
end
index do
column :gold_stars, sortable: true do |admin_user|
admin_user.gold_stars.count
end
end
但是除非我包括sortable:true,否则该列不会启用为可排序的:true,这使我认为我做错了什么或某些事情不能正常工作。上面的设置似乎对它的排序与默认情况没有什么不同。查看Rails日志,虽然params [:order]填充了类似于Proc的内容,但看起来并没有修改SQL查询,类似“ Proc:0x00007fb3c40c8080 @ / Users / user / active_admin_custom_sorting / app /admin/admin_user.rb:12_desc“