2011-09-07 71 views
0

我最近推了一個Rails 3.1應用程序到heroku。在本地,一切正常,但在實時應用程序中,搜索功能被破壞。Heroku搜索破 - Rails 3.1

型號:

def self.search(search) 
    if search 
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) 
    else 
    find(:all) 
    end 

檢視:

<%= form_tag apps_path, :method => 'get', :id => "search" do %> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil, :class => "search-button" %> 
<% end %> 

控制器:

def index 
    @apps = App.search(params[:search]) 
    @number_of_apps = @apps.count 
end 

我有一種感覺,它與我的本地設置在SQLite3上運行並且Heroku設置使用PostgreSQL有關。

任何幫助表示讚賞。 :)

回答

3

請注意,Postgres像匹配區分大小寫。嘗試使用ILIKE代替LIKE

+2

重申我的一個咒語 - 針對您將要部署到的同一個數據庫平臺進行開發!或者至少在部署之前進行測試。 –

+0

非常感謝您的建議:)它的工作,你會推薦任何具體的寶石更高級的搜索功能? – Ammar

+0

您應該看看[Postgres全文搜索功能](http://www.postgresql.org/docs/9.0/static/textsearch.html) – dexter

3

這裏有兩個問題:

  1. PostgreSQL的LIKE關鍵字比SQLite的LIKE不同。 SQLite中的LIKE是PostgreSQL中的ILIKE。可以使用正確的關鍵字或者比較結果。

  2. find(:all)自2.3以來已被棄用,並應在3.1中刪除。請使用#all方法。

    def self.search(query) 
        if query 
        where('name LIKE ?', "%#{query}%").all 
        else 
        all 
        end 
    end 
    

    更好的是,返回一個範圍以利用延遲加載。

    def self.search(query) 
        if query 
        where('name LIKE ?', "%#{query}%") 
        else 
        self 
        end 
    end 
    
0

你可以使用Texticle gem。 Heroku的安裝和工作非常簡單,但您需要使用PostgreSQL。