即使有要返回的记录,Rails也会返回nil

时间:2012-01-18 18:50:06

标签: ruby-on-rails sqlite

我正在研究一个RoR项目(RoR 3.1和Ruby 1.9.2p290),我遇到了一些严重的奇怪的问题,即使我知道应该找到的东西,查询也找不到东西

为简单起见,假设Car模型具有color属性。我在数据库中有几条记录,都是黑色。获取所有记录并在视图中显示它们工作正常,我看不出任何奇怪的事情。

@cars = Car.all

这是我从控制台拿到第一辆车并检查颜色是否等于黑色:

ruby-1.9.2-p290 :022 > Car.first.color == "Black"
  Car Load (0.2ms)  SELECT "cars".* FROM "cars" LIMIT 1
 => true 

这可以正常工作,你可以看到。现在,如果我尝试使用find_by_color进行查询,则会返回nil!那不应该。

ruby-1.9.2-p290 :021 > Car.find_by_color("Black")
  Car Load (0.3ms)  SELECT "cars".* FROM "cars" WHERE "cars"."color" = 'Black' LIMIT 1
 => nil 

同样适用于我检查颜色的任何类型的查询,例如

find(:all, :conditions => { :color => "Black" })

我已经尝试了所有可以尝试的东西,但目前我不知道可能会导致这样的事情。

知道这可能是什么或从哪里开始寻找?

我感到有任何帮助,在我疯狂之前解决这个问题;)

修改

颜色来自我通过文件上传导入的CSV文件,并将其解析为Car记录。可能有编码的东西或类似的东西?我也会在开发过程中使用SQLite,以防万一。

更新

我尝试了另一个有效的查询!!

Car.where('color like ?', "Black")

返回所有记录。很奇怪。这些查询之间可能有什么区别?

2 个答案:

答案 0 :(得分:1)

问题是编码,当我添加

value.encode('utf-8')

到我导入的CSV文件的每个字段,我在数据库中获得了适当的值。

编码问题似乎对查询产生了不同的影响。

答案 1 :(得分:0)

可能你的色域最后有一个奇怪的非打印字符,你必须直接在数据库中更新字段,清理多余的字符。