2015-04-15 2 views
1

Я имею дело с ситуацией, когда класс Parent имеет много Children. На мой взгляд, я показываю каждому ребенку последнего ребенка, чтобы войти в приложение. Для этого я создал область last_child_sign_in на моей родительской модели, которая выполняет сложный sql-запрос. Я поместил эту область в свой контроллер так, чтобы она имела @search = Parent.last_child_sign_in.search(params[:q]). Затем я запускаю другой запрос поверх этого результата, чтобы получить счет Order из таблицы связанных заказов.Сортировка временных меток, запрошенных SQL, с использованием Ransack

На мой взгляд у меня есть sort_link(@search, :last_child_sign_in, 'Last login'), который отправляет Parameters: {"q"=>{"s"=>"last_child_sign_in desc"}} контроллеру, но не влияет на сортировку объекта @search. Любые идеи были бы хорошы.

ответ

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, но иногда вы просто должны делать вещи по старинке.

Смежные вопросы