Ruby on rails 带可选参数的Sphinx搜索

Ruby on rails 带可选参数的Sphinx搜索,ruby-on-rails,ruby-on-rails-3,search,sphinx,thinking-sphinx,Ruby On Rails,Ruby On Rails 3,Search,Sphinx,Thinking Sphinx,我想将搜索与可选参数一起使用(考虑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],

我想将搜索与可选参数一起使用(考虑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
模型

当其中一个参数为nil时,我得到一个错误:

提取的源(第4行附近):

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"

搜索时,当您提供
:条件时,ThinkingSphinx会在查询中附加@filedname,以对该字段进行范围搜索。sphinx不处理
nil值
。因此,在将其传递给
search()
方法之前,应该检查nil值

请记住,Sphinx不支持SQL比较 运算符–它有自己的查询语言。条件选项必须是 是一个散列,每个键都是一个字段,每个值都是一个字符串


搜索时,当您提供
:条件时,ThinkingSphinx会在查询中附加@filedname,以对该字段进行范围搜索。sphinx不处理
nil值
。因此,在将其传递给
search()
方法之前,应该检查nil值

请记住,Sphinx不支持SQL比较 运算符–它有自己的查询语言。条件选项必须是 是一个散列,每个键都是一个字段,每个值都是一个字符串

Car.search:with=>{:里程=>100..150000}

工作

Car.search:with=>{:里程=>100..150000}


工作了

也许我应该用斯芬克斯镜?也许我应该用斯芬克斯镜?
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'
= 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"
define_index do
  indexes name

  has mileage
end