有没有办法让/ lib作业中的所有方法都可以使用持久变量?

时间:2011-05-06 22:08:29

标签: ruby-on-rails ruby-on-rails-3

我正在撰写以下工作:

/lib/contact_import_job.rb

在这份工作中,我有:

def perform
  current_user = XXX.user
  my_method(21)
end
private
my_method(i)
  is there a way to get current_user here w/o having to pass it???
end

有没有办法在my_method中使用current_user,而不必传递它?我有几个私有方法,将current_user传递给每个方法似乎很烦人吗?

想法?感谢

2 个答案:

答案 0 :(得分:2)

您可以将作业定义为一个类,因此您可以

class ContactImporterJob 

  def initialize(user)
    @user = user
  end

  def perform
    # Do all the stuff here, accessing @user for the user
  end

  private
  # Private methods still have access to @user
end

通过这种方式,您的脚本可以将当前用户一次性发送,而不必继续传递它。喜欢:

job = ContactImporterJob.new(current_user)
job.perform

答案 1 :(得分:0)

你应该总是将“状态”传递给你的外部方法,即使他们可以不经过而获得它。因此,请传递您的current_user和其他基于会话的数据。因此,它将更容易使用并测试

祝你好运