2011-09-18 63 views
2

我有一个模型:元搜索排序排序列

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的一个“重排”方法,但我不知道如何将它应用到整合检索)

回答

1

您可以使用unscoped方法,当你决定使用meta_search

@search = Event.unscoped.search(params[:search]) 
+0

但我想按日期使用范围和默认顺序,并且当用户单击“sort_link”时,按date_begin列重新排序。可能吗? –

0

我还希望使用默认的排序顺序,并没有找出任何其他方式,而不是在控制器中强制执行默认顺序,不使用任何排序范围模型:

search = {"meta_sort" => "created_at.desc"}.merge(params[:search] || {}) 
@search = Photo.search(search) 

默认的排序顺序是created_at DESC,但它会被超载如果在参数中收到新的排序顺序,则发送。似乎为我工作。

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)只取消:为了范围 - 有用的,如果你有。哪里(:deleted_at =>无).order(:date_begin)默认范围。

2)当未应用Ransack排序时,使用默认排序。