2010-06-21 66 views
0

我有以下问题:使用searchlogic用的habtm协会

我在我的Rails应用程序两班,由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),但没有结果,因为我认为它试图匹配id为“id1,id2,id3”的规范。我也尝试过。拆分ID或直接在数组中输入,但没有任何工作。

我确切的搜索查询是:

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关联,但是在开发过程的最后阶段,我们很晚才开始转向多态关系:)。

回答

0

如果我理解正确的,你想执行一个SQL IN()查询(即spec_id IN (x,y,z..)

Searchlogic不支持将数组传递给一个*_eq()方法将使用SQL的IN()谓词:

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

**不确定此功能是否适用于旧版本的Searchlogic *