Heroku Search Broken - Rails 3.1 - PullRequest
       8

Heroku Search Broken - Rails 3.1

0 голосов
/ 07 сентября 2011

Я недавно отправил приложение на Rails 3.1 в heroku.Локально все работает нормально, но в живом приложении функция поиска не работает.

Модель:

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

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 ]

3 голосов
/ 07 сентября 2011

Здесь есть два вопроса:

  1. Ключевое слово PostgreSQL LIKE отличается от LIKE в SQLite. LIKE в SQLite - ILIKE в PostgreSQL. Используйте правильное ключевое слово или прервите сравнение.

  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
    
3 голосов
/ 07 сентября 2011

Обратите внимание, что при сопоставлении с Postgres учитывается регистр. Попробуйте использовать ILIKE вместо LIKE

0 голосов
/ 03 февраля 2012

Вы можете использовать текстовый камень .Он очень прост в установке и прекрасно работает с Heroku, но вам нужно использовать PostgreSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...