0

will_paginateと一緒にacts_as_indexedを使用して検索機能を実装しています。Ruby1.8.7とRails2.3.11を使用しています。いいえ、共有ホストを使用しているため、Rubyをアップグレードできません。

'paginate'メソッドを定期的に使用すると期待どおりの結果が得られますが、'paginate_search'(acts_as_indexed paginationメソッド)を使用すると、奇妙な結果が得られます。

-ワインはすべてデータベースから取得されます(ログを確認したところ、クエリは良好に見えます)
-失敗するのはページネーションであり、一貫性のない「ページごとの」結果が生成されます

3つのオブジェクトの検索結果を想定します。

ページごとを1に設定すると、4、12、18ページを除いてすべて結果なしで18ページを取得します。ページごとを2に 設定すると
、2、6、9ページを除いてすべて結果なしで9ページを取得します(ここのパターンを参照してください)。
1ページあたり3に、2、4、6ページを除いてすべて結果なしで6ページを取得
-上記のパターンはすべて、結果ページごとに1つの結果を生成します

などなど...ファンキーな数学が行われているようですが、どこで、なぜかわかりません。

4

1 に答える 1

0

さて、私はこの問題を回避する方法を見つけました。本質的に、私は検索機能に条件を入れていましたが、それはどういうわけかそれを台無しにしていました。これは単純な「stock>0」の文字列であり、acts_as_indexedが混乱した理由はわかりませんが、何でもかまいません。回避策は、「stocked」という検索属性を追加することでした。在庫のある製品は「在庫あり」という用語で検索でき、在庫のないワインにはその属性がありません。検索メソッドに:conditionsパラメーターを入力する代わりに、必要に応じて「stocked」文字列を検索文字列に追加しました。今は動作します。以下のコードスニペット:

Wine.rb

# ... = indicates other attributes
acts_as_indexed :fields => [..., :stock_search]

def stock_search
    'stocked' if stock > 0
end

wines_controller.rb

srch = "#{ safe_tags * " " }#{ ' stocked' if params[:search_all].nil? }"
@wines = Wine.paginate_search(srch, :page => pg, :per_page => 10, :include => [{:awards => [:medal, :competition]}, {:reviews => :reviewer}])

要約すると:

これは機能します:Wine.paginate_search("cabernet stocked", :page => pg, :per_page => 10)

これは機能しません:Wine.paginate_search("cabernet", :conditions => "stock > 0", :page => pg, :per_page => 10)...技術的には検索は機能しますが、ページネーションは機能しません。

同じ問題が発生した場合に、これが誰かに役立つことを願っています。

于 2013-02-10T05:16:10.700 に答える