2016-12-30 22 views
1

我正在使用cassandra gem。 http://docs.datastax.com/en/developer/ruby-driver/3.0/features/我的模型中的Rails未定義方法

在我的模型,我做了以下內容:

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顯示錯誤:

未定義的方法'連接」的零:NilClass

def session 
    @cluster.connect('capsula') 
end 

我想要將連接保存在一個變量中,這樣就不必爲每個請求建立一個新的連接。

回答

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