【发布时间】:2012-01-15 20:43:18
【问题描述】:
我有一个活动记录 Song 模型,其 songhash 字段 (string(255)) 包含 Sha2 哈希。当我尝试通过以下代码查找歌曲时,没有返回任何内容:
song = Song.all.first
song2 = Song.where(songhash: song.songhash).first
# song is a valid object with a songhash set, but song2 is nil!
如果我用“like”查询做同样的事情,它会起作用:
song = Song.all.first
song2 = Song.where("songhash like ?", song.songhash).first
# song2 is a valid object now
song2.songhash == song.songhash
# the equation is true
我担心它与字符串编码有关,但我不知道为什么这个字符串可能存在编码问题:61a9761b9ebd543b72c5ccf2ab6db198b067f7cf7f8412ee6e9c14b19611bc80
我正在使用带有 sqlite db 的 rails 3.1。
有什么想法吗?
【问题讨论】:
-
Song.find_by_songhash(song.songhash)返回什么? -
不幸的是它返回 nil :-(
-
你是如何生成哈希的?哈希中没有空格吗?您是否尝试过直接使用哈希,而不是作为变量?
-
我尝试直接使用它,但即使这样也没有找到。生成哈希的代码是:
songhash = Digest::SHA2.hexdigest("#{self.title}#{self.album}#{self.artist}#{self.year}").to_s,所以没什么好激动的。 -
不确定是否重要,但 to_s 可能会抛出错误,因为 Digest::SHA2.hexdigest 返回一个字符串,并且在搅拌上没有 to_s 方法。
标签: ruby-on-rails sqlite activerecord ruby-on-rails-3.1