Search code examples
ruby-on-railssearchdev-to-production

search working in development but not in production


I just launched my rails app with heroku (http://fast-reaches-9399.herokuapp.com/). The search works on my local development environment, but not in the production environment. Could this be because of a problem with postgres vs. sqlite?

I did this:

group :development do
  gem 'sqlite3', '1.3.5'
end

group :production do
  gem 'pg', '0.12.2'
end

just like in this tutorial (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec-heroku_setup).

Here is my relevant code for searching. I used this (http://railscasts.com/episodes/37-simple-search-form) for help.

/search.html.erb

<h2>Results:</h2>

<ul>
    <% @colleges.each do |college| %>
        <li><%= link_to "#{college.name}", "#{college.url}" %></li>
    <% end %>
</ul>

application.html.erb (my layout file)

<%= form_tag("/search", :method => 'get') do -%>
    <li id="search"> <%= search_field_tag :search, params[:search] %></li>
<% end -%>

static_pages_controller.rb

def search
  @colleges = College.search(params[:search])
end

college.rb

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

Solution

  • As declan said, this is caused by the fact that postgres is case sensitive when using LIKE. The problem with using ILIKE is that it won't work in sqlite anymore.

    A kind of hack which works is to change the search condition to:

    find(:all, :conditions => ['UPPER(name) LIKE ?', "%#{search.upcase}%"])