我正在使用cassandra宝石。 http://docs.datastax.com/en/developer/ruby-driver/3.0/features/
在我的模型中,我正在做以下事情:
class User < ApplicationRecord
require 'cassandra'
def initialize
@cluster = Cassandra.cluster
end
def session
@cluster.connect('capsula')
end
def total_users
result = session.execute("SELECT * FROM users")
result.size
end
end
但是当我调用total_users method
时会显示错误:
未定义的方法`connect'代表nil:NilClass
def session
@cluster.connect('capsula')
end
我想在变量上保存连接,因此不需要为每个请求建立新连接。
答案 0 :(得分:2)
看起来@cluster
是零,所以它没有被正确初始化。
isn't a good idea为Rails模型定义initialize
。您可以改用callbacks。
如果我理解正确,会话不依赖于用户,可以为User
类而不是User
个实例定义:
class User < ApplicationRecord
require 'cassandra'
class << self
def cassandra_session
@session ||= Cassandra.cluster.connect('capsula')
end
end
def total_users
result = User.cassandra_session.execute("SELECT * FROM users")
result.size
end
end
使用@session ||=
表示@session
将初始化一次并在之后保存在缓存中:
@x ||= 1
@x ||= 2
@x ||= not_even_called
puts @x
#=> 1