MetaSearch排序列

时间:2011-09-18 08:55:55

标签: ruby-on-rails ruby-on-rails-3 meta-search

我有一个模特:

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)

3 个答案:

答案 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排序时使用默认排序。