活动记录“Where”查询无法找到记录

时间:2014-09-03 13:26:36

标签: ruby-on-rails activerecord ruby-on-rails-4

所以有一个令牌模型,其中的键是字符串。我正在搜索存在的令牌,当我对记录的字符串进行直接比较时,它应该找到一个空的活动记录关系对象。

任何人都知道这里发生了什么?我是否使用型号名称'Token'踩着模特脚趾。我没有在Google上找到任何关于它的内容。

我已将密钥存储为下方的“a”,Token.last.key是具有匹配密钥的数据库条目。

irb(main):023:0> a
=> "279684d7488254c41bb4039ad0962007"
irb(main):024:0> Token.last.key
  Token Load (0.4ms)  SELECT  "tokens".* FROM "tokens"   ORDER BY "tokens"."id" DESC LIMIT 1
=> "279684d7488254c41bb4039ad0962007"
irb(main):025:0> a == Token.last.key 
  Token Load (0.1ms)  SELECT  "tokens".* FROM "tokens"   ORDER BY "tokens"."id" DESC LIMIT 1
=> true
irb(main):026:0> Token.where(key: a)
  Token Load (0.2ms)  SELECT "tokens".* FROM "tokens"  WHERE "tokens"."key" = '279684d7488254c41bb4039ad0962007'
=> #<ActiveRecord::Relation []>
irb(main):027:0> Token.where(key: a.to_s)
  Token Load (0.2ms)  SELECT "tokens".* FROM "tokens"  WHERE "tokens"."key" = '279684d7488254c41bb4039ad0962007'
=> #<ActiveRecord::Relation []>

奇怪的是,当我搜索所有记录时,我确实会返回正确的用户

  #DOES WORK
  def current_user(key)
    Token.all.first {|t| return t.key == key }
  end

我有什么工作,但我想在数据库中用这样的东西做什么

  #DOES NOT WORK 
  def current_user(key)
    Token.where(key: key).try(:user)
  end

根据以下建议进行搜索,为find_by

返回nil
irb(main):004:0> a = Token.last.key
  Token Load (0.2ms)  SELECT  "tokens".* FROM "tokens"   ORDER BY "tokens"."id" DESC LIMIT 1
=> "279684d7488254c41bb4039ad0962007"
irb(main):005:0> Token.find_by(key: a)
  Token Load (0.2ms)  SELECT  "tokens".* FROM "tokens"  WHERE "tokens"."key" = '279684d7488254c41bb4039ad0962007' LIMIT 1
=> nil

解决方法就是这样做

def find_user_by_api(key)
  tokens = Token.arel_table
  Token.where(tokens[:key].matches(key)).try(:first).try(:user)
end

1 个答案:

答案 0 :(得分:1)

希望有所帮助

Token.find_by(key: a)