2011-04-11 152 views
1

使用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表的列。我想要结果返回其中一个满足条件。但不知道如何去做。

谢谢。

回答

8

塔斯社得到了它的权利 - 与您的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说法 - 但手动构建查询时,您需要自己设置它。

+0

谢谢帕特。当我尝试显示条目的总数时,我在我的视图中获得了'nil:NilClass'的未定义方法'total_entries'。 – Victor 2011-04-13 08:50:49

+0

对不起,我的坏。它工作得很好。谢谢! – Victor 2011-04-13 09:00:59

4

将您的原始搜索放置到狮身人面像 - 您应该在TS文件中找到正确的方法。 A reference for raw search。你可能想是这样

"@city_country #{@city.country} (@city_name #{@city.name} | @city_state #{@city.state})" 

(我不知道TS名称索引如何检查。)

+0

你能尝试完整的代码来合并这个吗? – Victor 2011-04-12 12:20:03

相关问题