Что я делаю не так в этом вызове paginate_by_sql?

Простите меня, ребята; Я все еще полный новичок в области RoR.

Я пытаюсь использовать гем will_paginate, чтобы добавить нумерацию страниц в результаты поиска в моих Rails приложение. Пока все работает отлично. Однако я наткнулся на препятствие.

У меня есть таблица продуктов с тысячами записей, которые я хочу полностью просматривать. Это просто в самом простом сценарии. У меня в контроллере вот это:

page = params[:page] || 1
@products = Product.paginate :page => page, :order => 'symbol'

Я хочу добавить параметр «буква», чтобы отображались и отображались только продукты, символы которых начинаются с данной буквы.

Вот что я пробовал:

letter = params[:letter] || 'A'
page = params[:page] || 1
@products = Product.paginate_by_sql
    ['select * from products where symbol like ?', letter + '*'],
    :page => page
    :order => 'symbol'

Но с этим кодом страница не загружается. Я вижу это в файле журнала, но мне это не кажется ошибкой:

Processing ProductsController#index (for 127.0.0.1 at 2010-09-15 10:03:22) [GET]
  [4;36;1mProduct Load (9.0ms)[0m   [0;1mselect * from products where symbol like 'A*' LIMIT 50 OFFSET 0[0m
Rendering template within layouts/main
Rendering products/index
Completed in 21ms (View: 4, DB: 9) | 200 OK [http://localhost/products]

Я понимаю, что, вероятно, упускаю что-то очевидное или не включаю информацию, которая может понадобиться для решения этой проблемы. Кто-нибудь захочет направить меня в правильном направлении или сообщить, какую еще информацию я должен предоставить?


person Dan Tao    schedule 15.09.2010    source источник


Ответы (1)


Не уверен, какую базу данных вы используете, но я считаю, что ваш SQL неверен. Разве это не должно быть letter + '%' не letter + '*'?

% обычно является подстановочным знаком SQL.

person Rob Di Marco    schedule 15.09.2010
comment
Вау, знаете, я мог бы поклясться, что пробовал это (я действительно где-то это читал); но очевидно, что я этого не сделал, потому что я только что внес это изменение, и теперь оно работает! Да, мой SQL непростительно плох. - person Dan Tao; 15.09.2010