Rails проблема найти по sql - PullRequest
0 голосов
/ 05 апреля 2010

У меня есть этот запрос, и у меня есть ошибка:

images = Image.find_by_sql('PREPARE stmt FROM \'
  SELECT *
  FROM images AS i
  WHERE i.on_id = 1 AND i.on_type = "profile"
  ORDER BY i.updated_at
  LIMIT ?, 6\
'; SET @lower_limit := ((5 DIV 6) * 6);  EXECUTE stmt USING @lower_limit;')

Mysql :: Ошибка: у вас есть ошибка в ваш синтаксис SQL; проверьте руководство, которое соответствует вашему серверу MySQL версия для правильного использования синтаксиса около 'SET @lower_limit: = ((5 DIV 6) * 6); EXECUTE stmt USING @lower_limit ' в строке 1: ПОДГОТОВИТЬ СТМТ ОТ ВЫБРАТЬ * ИЗ изображений КАК ГДЕ i.on_id = 1 И i.on_type = "профиль" ЗАКАЗАТЬ i.updated_at LIMIT?, 6 '; ЗАДАВАТЬ @lower_limit: = ((5 DIV 6) * 6); EXECUTE stmt USING @lower_limit;

EDIT: после нахождения ответа на: MySQL: мне нужно получить смещение элемента в запросе мне нужна другая помощь для переноса его на рельсы.

Ответы [ 3 ]

0 голосов
/ 05 апреля 2010

Я подумал, что сделаю новый ответ, потому что в комментарии не хватает места. Я думаю, что вы можете усложнить себе жизнь этим заявлением. Я почти уверен, что вы можете добиться желаемого эффекта с меньшими усилиями с помощью обычного Rails-оператора find. Это будет более переносимым (через базы данных), а также. Я не очень понимаю, что там происходит, но что-то вроде этого:

Image.find :all, :conditions => ["on_id = :on_id and on_type = :on_type", {:on_id => 1, :on_type => "profile"}], :order => "updated_at" :limit => (whatever calculation you are using to get your limit)

Синтаксис может быть немного неправильным, но он должен привести вас в стадион. В общем, вы должны стараться не допускать логику в базу данных и в свои модели.

0 голосов
/ 05 апреля 2010

Я подозреваю, что в find_by_sql вам может быть запрещено использовать разделенные точкой с запятой наборы запросов. Попробуйте найти способ просто использовать счастливый метод Rails find (см., Например, ответ @ Sleepycat).

0 голосов
/ 05 апреля 2010

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

Image.find_by_sql("PREPARE stmt FROM \'
  SELECT *
  FROM images AS i
  WHERE i.on_id = 1 AND i.on_type = 'profile'
  ORDER BY i.updated_at
  LIMIT ?, 6\
'; SET @lower_limit := ((5 DIV 6) * 6);  EXECUTE stmt USING @lower_limit;")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...