Как я могу использовать% в аргументе: условие для ActiveRecord.find? - PullRequest
3 голосов
/ 04 июня 2009

Я пытаюсь сделать запрос, подобный этому:

Widget.find(:all, :conditions => ["name like %awesome%"])

Тем не менее, я получаю исключение "неправильно сформированная строка формата" из sanitize_sql, указав в качестве проблемы "%".

Как мне выполнить этот запрос?

Ответы [ 3 ]

8 голосов
/ 04 июня 2009

Попробуйте этот синтаксис:

term = "awesome"
Widget.all(:conditions => ["name LIKE ?", "%#{term}%"])
0 голосов
/ 04 июня 2009

Ваше решение не работает, потому что у вас нет кавычек около% удивительно%.

0 голосов
/ 04 июня 2009

Попробуйте

Widget.find(:all, :conditions => ["name like '%awesome%'"])

Только что добавили одинарные кавычки вокруг строки %awesome%

Редактировать: Хорошо, это на самом деле не работает. Sql sanitizer делает что-то нехорошее с% s.

Это будет работать.

Widget.find(:all, :conditions => ["name like ?","%awesome%"])

Согласно ответу Джона Топли, вы можете сделать строку переменной, если это то, что вам действительно нужно.

Один совет, который я считаю полезным при работе с ошибками SQL, - проверка development.log, в которой будут перечислены все запросы, которые фактически выполняются к базе данных. Предполагая, что вы обладаете базовыми знаниями по SQL, часто полезно отлаживать их непосредственно в консоли, а не делать уколы на уровне ActiveRecord (хотя я думаю, что в вашем случае код подвергался критике, прежде чем он достиг этой стадии)

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