active_admin config.sort 两列
active_admin config.sort for two columns
我有一个名为 shows
的 active_admin table,它是自行车骑手和自行车的 rsvps 列表的行为,表明骑手将参加比赛。以下代码正确排序table 按 rider_last_name
的字母顺序排列:
config.sort_order = 'rider_last_name_asc'
现在,当骑手参加多个自行车展时,我希望 table 首先按 rider_last_name 排序,然后在该骑手中按 shows
的属性排序 start_time
。 start_time
是一个日期时间。根据 this Whosebug article,以下应该有效:
config.sort_order = 'rider_last_name_asc, start_time_asc'
但事实并非如此。事实上,它取消了 rider_last_name
的排序。如何按两列排序?
您可以尝试将数组传递给它:
config.sort_order = [:rider_last_name_asc, :start_time_asc]
您可以尝试优化集合的 apply_sorting 方法,如下所示:
controller do
def apply_sorting(chain)
params[:order] ? chain : chain.reorder(rider_last_name: :asc, start_time: :asc)
end
end
ActiveAdmin suggests 覆盖 find_collection
方法,即 returns 和 ActiveRecord::Relation
。但我更喜欢将 order
添加到它的输出中。
ActiveAdmin.register Show do
controller do
def find_collection(options = {})
super.reorder(rider_last_name: :asc, start_time: :asc)
end
end
...
end
虽然有效,但这会覆盖用户点击列的选项。
备选
您可以对 scoped_collection
执行相同的操作,它在 find_collection
的开头调用,但除非您将 active_admin_config.sort_order = ''
添加到控制器,否则它不起作用。这样:
controller do
active_admin_config.sort_order = ''
def scoped_collection
super.reorder(rider_last_name: :asc, start_time: :asc)
end
end
现在,如果我们想在之前和之后重新排序,请注意用户参数(不要覆盖它们)。这就是方法。
注意:我确实使用了active_admin_config.sort_order
而不是config.sort_order
。
此外,sort_order
选项作为 OrderClause.new
调用的参数结束,它只需要一个排序字段,请参阅 here and here。
我有一个名为 shows
的 active_admin table,它是自行车骑手和自行车的 rsvps 列表的行为,表明骑手将参加比赛。以下代码正确排序table 按 rider_last_name
的字母顺序排列:
config.sort_order = 'rider_last_name_asc'
现在,当骑手参加多个自行车展时,我希望 table 首先按 rider_last_name 排序,然后在该骑手中按 shows
的属性排序 start_time
。 start_time
是一个日期时间。根据 this Whosebug article,以下应该有效:
config.sort_order = 'rider_last_name_asc, start_time_asc'
但事实并非如此。事实上,它取消了 rider_last_name
的排序。如何按两列排序?
您可以尝试将数组传递给它:
config.sort_order = [:rider_last_name_asc, :start_time_asc]
您可以尝试优化集合的 apply_sorting 方法,如下所示:
controller do
def apply_sorting(chain)
params[:order] ? chain : chain.reorder(rider_last_name: :asc, start_time: :asc)
end
end
ActiveAdmin suggests 覆盖 find_collection
方法,即 returns 和 ActiveRecord::Relation
。但我更喜欢将 order
添加到它的输出中。
ActiveAdmin.register Show do
controller do
def find_collection(options = {})
super.reorder(rider_last_name: :asc, start_time: :asc)
end
end
...
end
虽然有效,但这会覆盖用户点击列的选项。
备选
您可以对 scoped_collection
执行相同的操作,它在 find_collection
的开头调用,但除非您将 active_admin_config.sort_order = ''
添加到控制器,否则它不起作用。这样:
controller do
active_admin_config.sort_order = ''
def scoped_collection
super.reorder(rider_last_name: :asc, start_time: :asc)
end
end
现在,如果我们想在之前和之后重新排序,请注意用户参数(不要覆盖它们)。这就是方法。
注意:我确实使用了active_admin_config.sort_order
而不是config.sort_order
。
此外,sort_order
选项作为 OrderClause.new
调用的参数结束,它只需要一个排序字段,请参阅 here and here。