#mysql #ruby-on-rails
#mysql #ruby-on-rails
Вопрос:
с Rails я столкнулся с этим:
User.find(:all, :conditions => ["character = ?", character])
character
это фиксированное число, как вы можете видеть по тому, как оно переведено для sql. Ожидается значение Fixnum.
Затем я получаю эту ошибку:
Mysql2::Error: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '= 5)'
at line 1: SELECT `users`.* FROM `users` WHERE (character = 5)
Я несколько сбит с толку и абсолютно не понимаю, что может быть не так с этой строкой sql.
Пожалуйста, помогите.
Ваш
Йорн
Комментарии:
1. Я уже пробовал проверять > и < символами -1 и 1 — все не помогло, та же ошибка
2. и я уже явно установил кодировку в UTF8 и сохранил файл
Ответ №1:
Проблема в том, что character
это ключевое слово в mysql. Если вы экранируете это в обратных ссылках, это должно сработать, например
User.find(:all, :conditions => ["`character` = ?", character])
Когда вы выполняете rails find, подобный
User.where(:character => character)
как предполагает Рич Пек, тогда rails автоматически экранирует имена всех полей, чтобы предотвратить эту проблему: вы можете увидеть, как это делается в вашем журнале.
РЕДАКТИРОВАТЬ: возможно, в долгосрочной перспективе вам будет проще изменить название вашего столбца.
Ответ №2:
ActiveRecord
При использовании Rails 4 вам следует использовать это для поиска нескольких записей:
User.where character: character
Если вы хотите загрузить определенную запись, вы можете просто использовать .find
вот так:
User.find_by character: character
—
Специфический
Я думаю, что ваша ошибка скорее связана с ActiveRecord, чем с Fixnum
одним — тот факт, что вы используете эти данные для поиска записей, не должен иметь никакого отношения.
Я могу ошибаться, но я думаю, что суть в том, что вы используете методы ActiveRecord, которые вы определили.