2011-04-11 65 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

相關問題