1

オプションのパラメータ(Thinking Sphinx)で検索を使用したい。

私のコントローラーには3つのパラメーターがあります:

params[:model_id], params[:engine_id], params[:city_id]

コントローラ

  def search  
    @search = Car.search :conditions => {
      :model_id => params[:model_id],
      :engine_id => params[:engine_id],
      :city_id => params[:city_id]
      }
  end

モデル

define_index do
    indexes model_id
    indexes city_id
    indexes area_id
    indexes engine_id
    indexes mileage
  end

パラメータの1つがnilの場合、エラーが発生します。

抽出されたソース(4行目あたり):

1: Result:
2: %br
3: %br
4:   = render :partial => "search_item", :collection => @search, :as => :item

index car_core: syntax error, unexpected TOK_FIELDLIMIT near '  @engine_id  @city_id'

UPD1:

私のフォーム

= form_tag search_adverts_path, :method => :get, :id => 'admin_quick_filter' do
  %label
    = t('form.mileage')
  = text_field_tag :min_mileage, params[:min_mileage]
  = text_field_tag :max_mileage, params[:max_mileage]
  %br
  = select_tag :model_id, options_for_select(Model.all.collect{|c| [c.name, c.id]} , params[:model_id]), :include_blank => true
  %br
  = select_tag :engine_id, options_for_select(Engine.all.collect{|c| [c.name, c.id]} , params[:engine_id]), :include_blank => true
  %br
  = select_tag :city_id, options_for_select(City.all.collect{|c| [c.name, c.id]} , params[:city_id]), :include_blank => true
  %br
  %br
  = submit_tag t('form.search')


= render "search_result"
4

2 に答える 2

1

検索中に、を指定する:conditionsと、ThinkingSphinxはクエリに@filednameを追加して、そのフィールドに検索をスコープします。そして、スフィンクスはを扱いませんnil values。したがって、メソッドに渡す前にnil値を確認する必要がありますsearch()

SphinxはSQL比較演算子をサポートしていないことに注意してください。独自のクエリ言語があります。:conditionsオプションはハッシュである必要があり、各キーはフィールドで、各値は文字列です。

于 2012-12-28T13:31:49.153 に答える
0
define_index do
  indexes name

  has mileage
end

Car.search:with => {:mileage => 100..150000}

働いた

于 2012-12-29T07:28:46.287 に答える