我正在研究一个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")
返回所有记录。很奇怪。这些查询之间可能有什么区别?
答案 0 :(得分:1)
问题是编码,当我添加
value.encode('utf-8')
到我导入的CSV文件的每个字段,我在数据库中获得了适当的值。
编码问题似乎对查询产生了不同的影响。
答案 1 :(得分:0)
可能你的色域最后有一个奇怪的非打印字符,你必须直接在数据库中更新字段,清理多余的字符。