如何在AcitveAdmin中将自定义排序应用于列

时间:2015-09-25 14:09:53

标签: ruby-on-rails activeadmin

我有一个带有name和release_date属性的Movie模型,以及以下的ActiveAdmin代码

ActiveAdmin.register Promotion do

  index do
    actions
    column :name
    column :release_date, sortable: :release_date
  end

end 

当我按release_date desc排序时,没有日期的条目会出现在顶部。我更喜欢这些条目总是在底部,无论排序顺序如何。在排序列时是否有任何方法指定比较函数?

2 个答案:

答案 0 :(得分:4)

我认为必须添加一个带有计数缓存的显式列来解决这个问题,这对于所需要的东西来说太过分了。为什么不在控制器中更新[ 'class' => 'kartik\grid\ActionColumn', 'template' => '{view} {update} {delete} {myaction}', // <-- your custom action's name 'buttons' => [ 'myaction' => function($url, $model, $key) { return Html::a('My action icon', [''my action url]; } ] ... ] 查询以选择额外的列?如果它在范围内(例如当前查询),您可以通过DSL访问它。

#scoped_collection

答案 1 :(得分:1)

我建议重新定义你的问题。

使用ActiveAdmin很难达到您的要求。因为ActiveAdmin的order clause非常严格:

clause =~ /^([\w\_\.]+)(->'\w+')?_(desc|asc)$/

因此,您需要重新定义ActiveAdmin::OrderClause类以接受NULL LAST或数据库系统支持的任何内容,或者只接受ActiveAdmin的工作方式。