【发布时间】:2012-12-29 00:33:11
【问题描述】:
我创建了一个名为 get_primary_email(user) 的方法,它位于我的 application_controller.rb 文件中。
现在我在我的应用程序以及调用使用 get_primary_email(user) 的方法的 cron 作业中都使用此方法
我的问题是,如果我将方法定义为:
def get_primary_email(user)
end
它在我的应用程序中运行良好,但 cron 作业出错。
如果我这样定义方法:
def self.get_primary_email(user)
end
我的 cron 作业有效,但通过浏览器调用 get_primary_email(user) 的每个方法都失败了。
如何在两个地方使用相同的方法?
编辑
schedule.rb
set :output, "#{path}/log/cron.log"
every 1.day, :at => "8:00pm" do
runner "BirthdayRemindersController.send_birthday_email_reminders"
end
【问题讨论】:
-
您是否在模型中定义“get_primary_email”?您能向我们展示一下代码以及您是如何设置 cron 作业的吗?
-
不,这是我的 application_controller.rb 文件。我用作帮助用户获取主要用户的方法。每个用户最多可以有 3 封电子邮件,并且每封电子邮件都有一个布尔字段。
-
最好的选择可能是将方法移动到一个单独的类并在那里调用它。将这样的东西放在模型上是很常见的,但它可以作为一个独立的类正常工作。
-
你了解实例方法和类(静态)方法的区别吗?您将其称为应用程序中的实例方法和 cron 中的类方法。这是你的问题。我建议将此方法移动到模型中,然后创建一个用户演示器以将功能公开给控制器和 cron
-
我对实例方法和类方法的区别有点熟悉。你能解释一下“用户演示者”是什么意思吗?
标签: ruby-on-rails ruby ruby-on-rails-3 cron whenever