2011-09-18 102 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排序時,使用默認排序。