0

こんにちは、それぞれの優れた RailsCasts チュートリアルに基づいて、シンプルな検索機能と will_paginate ページネーションを組み合わせています。

コード (モデル内) を以下に示します。

def search(search, page)

  # See RailsCasts #37 Simple Search Form & #51 will_paginate

  if search
    @matches = SalesActivity.where('salespeople.name LIKE ? OR products.name LIKE ?',
                                      "%#{search}%", "%#{search}%")

    @matches.paginate :per_page => 30,
                      :page => page,
                      :order => 'created_at DESC' # <--- causes exception
  else
    paginate :include => [:salesperson, :product],
             :order => 'created_at DESC',  # works 
             :per_page => 30,
             :page => page
  end
end

指定された順序は、検索なしのパスのページネーション リクエストで正常に機能します。

ただし、検索結果 (@matches) を使用するパスでは、次のエラーが発生します。

SQLite3::SQLException: ambiguous column name: created_at: SELECT ...  ORDER BY created_at DESC LIMIT 30 OFFSET 

order パラメータを削除すると、正常に動作します。

これを修正する方法についての提案をいただければ幸いです。ありがとう。

4

3 に答える 3

0

これらのレール キャストはどちらもかなり古いものです。ソースを調べて、レール 2 と 3 の間に大きな変更がないことを確認します。

また、移行の一部として created_at を生成していることを再確認してください。

于 2012-05-03T16:38:02.387 に答える
0
@matches.paginate(:per_page => 30,:page => page).order('created_at DESC')
于 2016-03-10T15:00:08.393 に答える
0

ここでの修正は、Active Record Query プロトコルに従って、データをロードするための実際のクエリを開始するために、'where' リクエストの最後に 'all' を追加することでした。

@matches = SalesActivity.where('salespeople.name LIKE ? OR products.name LIKE ?',
                                  "%#{search}%", "%#{search}%").all
于 2012-05-28T10:28:10.243 に答える