2

I have a model:

class Event < ActiveRecord::Base
  default_scope :order => 'date_begin'
end

There is a sort link in a view file:

= sort_link @search, :date_begin

When I'm trying to order date_begin as DESC nothing happens because the SQL query is:

SELECT * FROM events ORDER BY date_begin, date_begin DESC

How to make MetaSearch reorder this column? (I know that there is a "reorder" method in ActiveRecord but I don't know how to apply it to MetaSearch)

4

3 回答 3

1

当您决定使用时,您可以使用unscopedmeta_search方法:

@search = Event.unscoped.search(params[:search])
于 2011-09-18T11:50:03.217 回答
0

我还想使用默认排序顺序,除了在控制器中强制执行默认顺序之外没有想出任何其他方法,而不是在模型中使用任何排序范围:

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

默认排序顺序是 created_at DESC,但如果在参数中收到新的排序顺序,它将被覆盖。似乎对我有用。

于 2011-12-14T11:22:04.173 回答
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) 仅取消 :order 范围 - 如果您有 .where(:deleted_at => nil).order(:date_begin) 默认范围,则很有用。

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

于 2012-09-16T19:15:09.377 回答