Простой поиск в нескольких столбцах из SQLite в Heroku / PostgreSQL - PullRequest
0 голосов
/ 04 декабря 2010
def self.search(search)
  if search
    where('name OR username OR bio LIKE ?', "%#{search}%")
  else
    scoped
  end
end

Приведенный выше код прекрасно работает на моем сервере разработки, использующем SQLite, но поскольку Heroku использует PostgreSQL, он ломается (кажется, что вы можете использовать только «ИЛИ» в действительно булевых запросах).

Есть ли лучший способ реализовать этот простой поиск, чтобы он работал с PostgreSQL, или мне нужно перейти к более сложному поисковому решению?

1 Ответ

1 голос
/ 04 декабря 2010

Вы ищете что-то подобное?

def self.search(search)
  if search
    where('name IS NOT NULL OR username IS NOT NULL OR bio LIKE ?', "%#{search}%")
  else
    scoped
  end
end

Если name и username могут быть NULL или пустыми, то вы захотите использовать COALESCE:

def self.search(search)
  if search
    where("COALESCE(name, '') <> '' OR COALESCE(username, '') <> '' OR bio LIKE ?", "%#{search}%")
  else
    scoped
  end
end

Они должны работать одинаково в SQLite и PostgreSQL.

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