如何动态定义实例哈希?

时间:2015-01-26 23:40:02

标签: ruby-on-rails ruby slack-api

我创建了以下模块:

module SlackHelper
  def alert_slack(message)
    notifier.ping.message
  end

  private

  def notifier(channel="default")
    @notifier[channel]||= Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + channel]
  end
end

以前这是没有频道写的,而且很有效。我得到的错误是:

undefined method `[]' for nil:NilClass

2 个答案:

答案 0 :(得分:1)

@notifier ||= Hash.new{|hsh, k| hsh[k] = Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + k]}

通过此操作,您的哈希配置为在您访问新密钥时自动构建Slack::Notifier

所以你只需做:@notifier[channel]并且它会变得不稳定。

因此,您可以摆脱私有的notifier方法并执行:

def alert_slack(message,channel='default')
  @notifier ||= Hash.new{|hsh, k| hsh[k] = Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + k]}
  @notifier[channel].ping message
end

答案 1 :(得分:1)

尝试:

def notifier(channel="default")
   @notifier ||= {}
   @notifier[channel] ||= Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + channel]
end