Запрос просто неверный. Во-первых, '||' не является оператором конкатенации. Во-вторых, приоритет оператора делает его оцененным как:
(lower(fname)) || (' ') || (lower(lname) LIKE '%Bob Smith%')
это не то, что вы хотите. Я думаю, вам понравится:
concat(lower(fname), ' ', lower(lname)) LIKE '%Bob Smith%'
РЕДАКТИРОВАТЬ: Таким образом, вы можете использовать:
@users = User.find( :all,
:select => 'users.*',
:conditions => ["concat(lower(fname), ' ', lower(lname)) LIKE ?", "%#{params[:q].downcase}%"])
РЕДАКТИРОВАТЬ2: Выше, это неправильно, я не заметил, что это было о Postgresql Есть '||' оператор конкатенации в Postgres конечно. Я не удаляю этот пост из-за комментариев ниже, но не используйте его, пожалуйста.