Ruby / Rails приведен как строковая ошибка - PullRequest
2 голосов
/ 14 июля 2011

Я использую гем parseexcel для чтения файла Excel ... все работает нормально, пока я печатаю материал на консоль.я создал грабли для вставки данных в базу данных .. поэтому у меня есть куча операторов create.вот так

description = row[i+1].to_s
Coa.create(:is_group => true, :ag_gl_code => "AGL_001", :description => "#{description}")

моя проблема с переменной 'description'.это строковое поле.если я печатаю описание на консоль, как это, он работает и печатает значение

puts "{#description}" #prints the value 'Estate'

, но при создании он выдает ошибку sql

SQLite3::SQLException: unrecognized token: "'E": 

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

любая помощь будет оценена.спасибо

вот моя схема

create_table "coas", :force => true do |t|
  t.string   "ag_gl_code"
  t.string   "description"
  t.boolean  "is_group"
  t.datetime "created_at"
  t.datetime "updated_at"
end

вот журнал терминала, я записал значение 'description', обратите внимание, что он печатает значение, и никаких дополнительных кавычек.

Estate
rake aborted!
SQLite3::SQLException: unrecognized token: "'E": INSERT INTO "coas" ("created_at", "is_group" , "description", "ag_gl_code", "updated_at") VALUES ('2011-07-14 14:48:56.616150', 't', 'Estate', 'AGL_001', '2011-07-14 14:48:56.616150')

Ответы [ 3 ]

1 голос
/ 15 июля 2011

хорошо, я исправил это. в конце концов.

description.to_s("latin1")

это была проблема с sqlite-кодированием.

0 голосов
/ 14 июля 2011

Кажется, проблема в том, что ваша переменная description содержит строку "'Estate'".Пожалуйста, обратите внимание на одинарные кавычки.Это, вероятно, причина сбоя SQL-запроса.

Вы можете решить эту проблему, удалив кавычки из строки description:

description = row[i+1].to_s[1..-2]

Если вышеприведенное не сработало (возможно, ваши данныесодержит некоторые поля, не заключенные в одинарные кавычки) следующее регулярное выражение может работать лучше:

description = row[i+1].to_s.match(/'(.*)'/)[1]

РЕДАКТИРОВАТЬ: Если вам нужны одинарные кавычки в вашей базе данных, вам, вероятно, придется выйтиодинарные кавычки.

0 голосов
/ 14 июля 2011

Попробуйте это

Coa.create(:is_group => true, :ag_gl_code => "AGL_001", :description => description)

или это

Coa.create(:is_group => true, :ag_gl_code => "AGL_001", :description => h(description))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...