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に「並べ替え」メソッドがあることは知っていますが、それをMetaSearchに適用する方法がわかりません)

4

3 に答える 3

1

使用することにした場合は、スコープなしの方法を使用できmeta_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_atDESCですが、パラメーターで新しいソート順を受信すると上書きされます。私のために働くようです。

于 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 に答える