0

レールが行っている並べ替えに問題があります。大文字がグループ化され、次に小文字がグループ化されているようです。そして、データベース内のデータは同じである必要がありますが、ユーザー入力を助けることができないことに同意します。

私の検索コントローラー

def accounts
    @accounts ||= Account.search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 100, :page => params[:page])
  end
  helper_method :accounts

  def account
    @account ||= params[:id] ? Account.find(params[:id]) : Account.new(params[:account])
  end
  helper_method :account

  def sort_column
    Account.column_names.include?(params[:sort]) ? params[:sort] : "name"
  end

  def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
  end

私のモデルでは私が持っています

def self.search(search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end

これで完全に動作しますが、A B C a b c と表示されます

そして、それはA a B b C cでなければなりません

4

3 に答える 3

2

order to orderは、データベースへの「ORDERBY」呼び出しを作成するだけです。これを確認するには、ログを確認してください。別の順序が必要な場合は、データベースが結果を順序付ける方法を微調整する必要があります。

于 2012-07-03T17:42:23.577 に答える
1

を使用する場合

where('name ILIKE ?', "%#{search}%")

代わりに

お気に入り

于 2012-07-23T14:02:11.013 に答える
0

私がそれをするのが好きな方法は

result = Users.find(:all, :order => "LOWER(#{params[:sort]} #{params[:direction]})")
于 2015-08-03T11:26:01.627 に答える