我正在处理Parent
班级有很多Children
的情况。在我看来,我正在显示每个父母的最后一个孩子,以登录该应用程序。为此,我在我的Parent模型上创建了一个范围last_child_sign_in
,用于执行复杂的SQL查询。我将该范围放在我的控制器中,使其具有@search = Parent.last_child_sign_in.search(params[:q])
。然后,我在该结果之上运行另一个查询,以从关联的订单表中获取Order
计数。
在我看来,我有一个sort_link(@search, :last_child_sign_in, 'Last login')
,它将Parameters: {"q"=>{"s"=>"last_child_sign_in desc"}}
发送到控制器,但它根本不会影响@search对象的排序。任何想法都将不胜感激。
答案 0 :(得分:0)
经过多次摆弄这个问题后,我得出的结论是 Ransack在这种情况下无法处理排序。我最终创建了逻辑,在控制器中使用SQL手动对列进行排序:
if( sorting_by_last_child_sign_in? )
if( params[:q][:s].ends_with? 'asc' )
direction = "DESC NULLS LAST"
else
direction = "ASC NULLS LAST"
end
parents_scope =
parents_scope.order( "MAX(child_users.current_sign_in_at
AT TIME ZONE 'UTC' AT TIME ZONE 'US/PACIFIC') #{direction}" )
end
我爱我一些Ransack,但有时你只需要用老式的方式做事。