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'
是否有任何影响比较的方法,而不是保存字符串定义变量的索引值?
答案 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将执行所有必要的类型转换。