Ruby Mongoid访问问题

Ruby Mongoid访问问题,ruby,mongodb,mongoid,Ruby,Mongodb,Mongoid,我正在写一个里面有DB的应用程序。我用的是MongoId。它只是一个数据库,只有一个条目。我正在数据库中保存一个令牌 api.rb def get_wink_token retrieve_token.present? ? retrieve_token : new_token end def new_token RestClient.get "#{ENV['DOMAIN']}/oauth2/authorize?response_type=code&

我正在写一个里面有DB的应用程序。我用的是MongoId。它只是一个数据库,只有一个条目。我正在数据库中保存一个令牌

api.rb

    def get_wink_token
      retrieve_token.present? ? retrieve_token : new_token
    end

    def new_token
      RestClient.get "#{ENV['DOMAIN']}/oauth2/authorize?response_type=code&client_id=#{ENV['CLIENT_ID']}&redirect_uri=#{ENV['REDIRECT_URI']}"
      token_credentials = RestClient.post "#{ENV['DOMAIN']}/oauth2/token", credentials, headers
      access_token = JSON.parse(token_credentials)['data']['access_token']
      TokenDb.any_in(:name => 'Token').destroy_all
      TokenDb.create(name:'Token', token:access_token)
      access_token
    end

    def retrieve_token
      TokenDb.where(:name => 'Token').present? ? TokenDb.where(:name => 'Token').first[:token] : nil
    end
通过
new_token
获取令牌的过程运行正常。我的问题是在执行TokenDb.where时发生崩溃。现在造成了崩溃

TokenDB类的定义如下:

class TokenDb
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Attributes::Dynamic

  field :name,      type:String
  field :token,     type:String

  validates_presence_of :name, :token
end
我试图做的是检查数据库
tokenDb
是否有一个名为Token的条目并检索数据,如果没有,我将生成一个新的密钥

2017-03-13 23:18:08 - NoMethodError - undefined method `each' for nil   /Users/sebastien/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/core_ext/object/blank.rb:22:in `present?'
    /Users/sebastien/smarthome/models/credentials.rb:23:in `retrieve_token'
问题发生在TokenDb中。其中。。。线


有什么想法吗?

您只需使用
find\u by
并在异常不存在时拯救异常:

def get_wink_token
  TokenDb.find_by(name: 'token').token
rescue Mongoid::Errors::DocumentNotFound
  create_token
end

def create_token
  RestClient.get "#{ENV['DOMAIN']}/oauth2/authorize?response_type=code&client_id=#{ENV['CLIENT_ID']}&redirect_uri=#{ENV['REDIRECT_URI']}"
  token_credentials = RestClient.post "#{ENV['DOMAIN']}/oauth2/token", credentials, headers
  access_token = JSON.parse(token_credentials)['data']['access_token']
  TokenDb.any_in(:name => 'Token').destroy_all
  TokenDb.create(name: 'Token', token: access_token)
  access_token
end

尽管仅仅为了这个目的而使用数据库是过分的…

您会遇到什么错误?它们是在客户端还是服务器端,或者两者都在?