我正在做一个 RoR 项目(RoR 3.1 和 Ruby 1.9.2p290),我遇到了一些严重的 即使我知道应该找到东西,查询也找不到东西的奇怪问题 .
为简单起见,假设有一个 Car
具有 color
的模型属性。我在数据库中有几条记录,都是黑色的。获取所有记录并在 View 中显示它们工作正常,我一点也不觉得奇怪。
@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")
这将返回所有记录。很奇怪。这些查询之间可能有什么区别?
最佳答案
问题是编码,当我添加
value.encode('utf-8')
对于我导入的 CSV 文件的每个字段,我都在数据库中得到了正确的值。
编码问题似乎对查询的影响不同。
关于ruby-on-rails - 即使有要返回的记录,Rails find 也会返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8915635/