【发布时间】:2011-11-22 05:57:43
【问题描述】:
我有一个名为Invitation 的模型,它有一个名为code 的属性。该应用程序的目标是通过在某处输入的代码找到正确的邀请。
然而,我的问题是,即使输入正确,ActiveRecord 在数据库中查询时似乎也找不到任何结果。我创建了这个小测试来说明问题:
ruby-1.9.2-p290 :003 > code = Invitation.first.code
Invitation Load (0.4ms) SELECT "invitations".* FROM "invitations" LIMIT 1
=> "86f50776bf"
所以此时我已将此邀请的代码加载到变量中
ruby-1.9.2-p290 :004 > i = Invitation.where(:code => code)
Invitation Load (0.2ms) SELECT "invitations".* FROM "invitations" WHERE "invitations"."code" = '86f50776bf'
=> []
查询的响应是一个空数组,即使代码直接来自数据库。当使用code == Invitation.first.code 查看值是否相等时,它返回true。我已经检查了 Ruby 和数据库的数据类型,它们都是字符串。
是什么原因造成的?我该如何解决这个问题?
【问题讨论】:
-
如果直接执行那个 SQL 会发生什么?
-
一样,不过——我忘了提——当我使用
LIKE而不是 = 时,它确实找到了它。 -
补充一下,这是首先生成
code的代码(在模型初始化时):self.code = ActiveSupport::SecureRandom.hex(5) if self.code.blank?。我已经尝试在它后面加上 to_s,但这没有效果。
标签: ruby-on-rails ruby-on-rails-3 sqlite activerecord