我有一个我想创建的对象,可以在我的一个模型中访问.我把他放在哪里?我担心如果我把他放在模型类文件中,每次我创建该模型的新实例时都会创建它.我只想在启动时创建一次这个对象.这是对象:
require 'pubnub'
publish_key = 'fdasfs'
subscribe_key = 'sdfsdsf'
secret_key = 'fsdfsd'
ssl_on = false
pubnub_obj = Pubnub.new(publish_key,
subscribe_key,
secret_key,
ssl_on)
Run Code Online (Sandbox Code Playgroud)
我在模型中使用他这样:
class Message < ActiveRecord::Base
def self.send_new_message_client(message)
message = { 'some_data' => message }
info = pubnub_obj.publish({
'channel' => 'testing',
'message' => message
})
puts(info)
end
end
Run Code Online (Sandbox Code Playgroud)
alf*_*alf 37
在Rails中,每个请求都会重新创建对象.如果这是某种服务,它应该是请求范围内的单例.
应使用ruby singleton mixin创建Singleton对象:
require 'singleton'
class Pubnub
include Singleton
def initialize(publish_key, subscribe_key, secret_key, ssl_on)
# ...
end
def publish
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以用instance方法调用它:
Pubnub.instance.publish
Run Code Online (Sandbox Code Playgroud)
这样你就可以确保这个对象实际上是一个单例(只存在一个实例).
您可以将其安全地放在models目录中,但我通常更喜欢该lib目录,或者可能为服务创建一个新目录.这取决于实际情况.
希望能帮助到你!
如果整个应用程序中只需要一个实例,请使用单例,否则使用类变量。
要使用单例,请包含单例混合。
require 'singleton'
class Pubnub
include Singleton
attr_writer :publish_key, :subscribe_key, :secret_key, :ssl_on
def publish
#...
end
end
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
require 'pubnub'
class Message < ActiveRecord::Base
Pubnub.instance.publish_key = 'xyz'
Pubnub.instance.subscribe_key = 'xyz'
Pubnub.instance.secret_key = 'xyz'
Pubnub.instance.ssl_on = 'xyz'
def self.send_new_message_client(message)
message = { 'some_data' => message }
info = Pubnub.instance.publish({
'channel' => 'testing',
'message' => message
})
puts(info)
end
end
Run Code Online (Sandbox Code Playgroud)
您还可以将其设置为类变量,以将其更紧密地链接到特定模型:
require 'pubnub'
class Message < ActiveRecord::Base
@@pubnub_obj = Pubnub.new('xyz', 'xyz', 'xyz', 'xyz')
def self.send_new_message_client(message)
message = { 'some_data' => message }
info = @@pubnub_obj.publish({
'channel' => 'testing',
'message' => message
})
puts(info)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19638 次 |
| 最近记录: |