使用RoR 2.3.8。
这是我的控制器代码:
class CitiesController < ApplicationController
def show
@city = City.find(params[:id])
@shops = Shop.search @city.name, {
:conditions => {:country => @city.country && (:city => @city.name || :state => @city.state)},
:page => params[:page],
:per_page => 100
}
end
end
:conditions => {:country => @city.country && (:city => @city.name || :state => @city.state)}
显然不起作用,因为我只想解释我想要实现的目标。
:city
和:state
将是Spots
表中的列,而不是Cities
表中的列。我希望结果返回其中一个满足条件。但不知道该怎么做。
感谢。
答案 0 :(得分:8)
Tass说得对 - 通过你的TS搜索电话,看起来应该是这样的:
def show
@city = City.find(params[:id])
@shops = Shop.search "#{@city.name} @country #{@city.country} (@city #{@city.name} | @state #{@city.state})",
:match_mode => :extended,
:page => params[:page],
:per_page => 100
}
end
你会注意到我已经设置了匹配模式 - 如果你使用:conditions
参数,Thinking Sphinx会自动执行此操作 - 但是在手动构建查询时,你需要自己设置它。
答案 1 :(得分:4)
将原始搜索放置到Sphinx - 您应该在TS文档中找到正确的方法。一个reference for raw search。你可能想要像
这样的东西"@city_country #{@city.country} (@city_name #{@city.name} | @city_state #{@city.state})"
(我不确定TS如何命名索引。检查一下。)