0

次の問題があります。

次のように、Rails アプリに 2 つのクラスがあり、HABTM アソシエーションが参加しています。

#ad.rb
has_and_belongs_to_many :specs
#spec.rb
has_and_belongs_to_many :ads

ads_specs テーブルによって結合されます。優れた searchlogic gem を使用して Ad クラスで検索を実行しようとしています。選択した仕様のすべてではなく、すべての仕様を持つすべての広告を返したいと思うまで、すべてがうまくいきました。

@ads = Ad.specs_id_like_all(id1, id2, id3)スペックを「id1、id2、id3」のIDと一致させようとしていると思うので、試しましたが結果はありませんでした。また、ID を .split するか、配列に直接入力しようとしましたが、何も機能しませんでした。

私の正確な検索クエリは次のとおりです。

if params[:search]
  @ads = Ad.search(:price_lte => params[:search][:price],
                   :rulaj_lte => params[:search][:rulaj],
                   :fabrication_date_gte => Date.new(params[:search][:"an_fabr(1i)"].to_i,"01".to_i,"01".to_i)).specs_id_like_all(2, 457, 233)

else
  @ads = Ad.all
end

どうすればこの問題を解決できるか分かりますか? RailsアプリでHABTM関連付けを使用するのはこれが最後だと断言しますが、開発プロセスの後半でポリモーフィックに変更するには遅すぎます:)。

4

1 に答える 1

0

私の理解が正しければ、あなたは SQL IN() クエリを実行しようとしています (つまりspec_id IN (x,y,z..))

Searchlogic は、*_eq()SQL の IN() 述語を使用するメソッドに配列を渡すことをサポートしています。

Ad.search(:spec_id_eq => [1,2,3,4])

**これが古いバージョンの Searchlogic で機能するかどうかは不明です*

于 2010-06-23T03:50:06.433 に答える