2011-07-14 37 views
2

我使用parseexcel gem来读取excel文件.. 只要我将东西打印到控制台,每件事情都可以正常工作。 我创建了一个rake任务来将数据插入到db ..所以我有一堆创建语句。像这样Ruby/Rails强制转换为字符串错误

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 

这里是终端的日志,我已经登录的“说明”的值,注意它打印的价值,并没有额外的报价。

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') 
+1

你为什么要像':description =>“#{description}”''那样插入字符串?只需':description => description'就足够了。而你的错误信息表明有人没有正确引用事情。 –

+0

'puts“{#description}”'错字? – Dogbert

+0

我试过:description =>描述,给出了同样的错误,但是如果我把:description =>'estate',它工作正常。 (投入是我在这里创建的类型) –

回答

1

好吧我修好了。最后。

description.to_s("latin1") 

这是一个与sqlite编码有关的问题。

-3

试试这个

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)) 
+0

第一个我以前尝试过的同样的错误,第二个说h是未定义的。 –

0

的问题似乎是,你description变量包含字符串"'Estate'"。请注意单引号。 这可能是SQL查询失败的原因。

可以解决这个问题,从description字符串删除引号:

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

如果上述失败(也许你的数据包含一些字段不是单引号)以下的正则表达式可以更好地工作:

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

编辑:如果您需要在数据库中的单引号,你可能有逃避单引号。

+0

有没有额外的引号,所以你的第一个片段删除部分字符串。第二个给出了一个神秘的错误。 :S –

相关问题