我有一个模特:
class Event < ActiveRecord::Base
default_scope :order => 'date_begin'
end
视图文件中有一个排序链接:
= sort_link @search, :date_begin
当我尝试将date_begin命名为DESC时,没有任何反应,因为SQL查询是:
SELECT * FROM events ORDER BY date_begin, date_begin DESC
如何让MetaSearch重新排序此列? (我知道ActiveRecord中有一个“重新排序”方法,但我不知道如何将其应用于MetaSearch)
答案 0 :(得分:1)
您决定使用meta_search
时可以使用unscoped方法:
@search = Event.unscoped.search(params[:search])
答案 1 :(得分:0)
我还想使用默认的排序顺序,除了在控制器中强制执行默认订单,而不是在模型中使用任何订购范围时,我没有想出任何其他方式:
search = {"meta_sort" => "created_at.desc"}.merge(params[:search] || {})
@search = Photo.search(search)
默认排序顺序是created_at DESC,但如果在params中收到新的排序顺序,它将被覆盖。似乎为我工作。
答案 2 :(得分:0)
@search = if params[:q] && params[:q][:s]
# Ransack sorting is applied - cancel default sorting
Event.reorder(nil).search(params[:q])
else
# Use default sorting
Event.search(params[:q])
end
优点:
1)仅取消:订单范围 - 如果您有.where(:deleted_at =&gt; nil).order(:date_begin)默认范围,则非常有用。
2)在未应用Ransack排序时使用默认排序。