导入数据并与字符串定义的字段进行比较

时间:2015-03-02 20:00:03

标签: ruby ruby-on-rails-3

CSV导入需要将一列数据与索引字符串值进行比较,这些值是数字文字:

import_csv任务

   @model = row[0]
   @article =  Article.where(['model = ?', @model.to_i]).first
因此,

尝试将csv文件中的整数与返回的字符串ad进行比较。

LINE 1: ...T  "articles".* FROM "articles"  WHERE (model = 1410) LI...
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT  "articles".* FROM "articles"  WHERE (model = 1406) LIMIT 1'
01406, ,0,0,1,0,0,RASATO,,408
Error importing row because 'PG::UndefinedFunction: ERROR:  operator does not exist: character varying = integer

注意:比较字符串

上的字符串
   @article =  Article.where(['model = ?', @model]).first

'Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id'

是否有任何影响比较的方法,而不是保存字符串定义变量的索引值?

1 个答案:

答案 0 :(得分:0)

从错误消息:operator does not exist: character varying = integer - 我可以假设model列的类型为String。所以你必须将它与字符串进行比较,而不是整数。

尝试:

@article =  Article.where(['model = ?', @model.to_s]).first

或对@model执行任何其他处理,但最终在传递给.where之前将其转换为字符串。

UPDATE :另外,为什么你会为where使用绑定参数语法来解决这个简单的问题?传递哈希,如下:

Article.where(model: @model)

这样ActiveRecord将执行所有必要的类型转换。