【发布时间】:2012-04-10 20:29:35
【问题描述】:
这有几个阶段,由于我对 Rails 比较陌生,我不确定我是否以最好的方式来解决这个问题。
用户关注公司,公司申请在特定日期打开和关闭。如果用户关注一家公司,我希望他们在以下情况下自动收到电子邮件:a) 公司申请打开,b) 公司申请关闭前一周,c) 公司申请关闭当天。
我尝试过使用命名范围。我有以下模型方法(我认为这需要一些工作)设置每个公司的范围,具体取决于日期。
模型公司.rb
def application_status
if open_date == Today.date
self.opening = true
else
self.opening = false
end
if ((close_day - Today.date) == 7)
self.warning = true
else
self.warning = false
end
if close_day == Today.date
self.closing = true
else
self.closing = false
end
end
我希望每天对每个公司调用一次此方法,以便每个公司都有适当的范围 - 所以我尝试使用when gem (cron) 和以下代码。在每家公司上运行上述模型方法。
Schedule.rb
every 1.day do
runner "Firm.all.each do |firm|
firm.application_status
end"
end
然后对于每个范围的打开、警告、关闭,我在无论何时调度文件中都有一个方法,为简单起见,我将只显示打开方法。以下查询适用于所有已应用开放范围的公司,并对其运行 application_open_notification 方法。
Schedule.rb
every 1.day do
runner "Firm.opening.each do |firm|
firm.application_open_notification
end"
end
这会调用 Firm.rb 模型中的以下方法
def application_open_notification
self.users.each do |user|
FirmMailer.application_open(user, self).deliver
end
end
这又称为拼图的最后一块……应该向用户发送一封电子邮件,其中包括公司的名称。
def application_open(user,firm)
@firm = firm
@user = user
mail to: @user.email, subject: @firm' is now accepting applications'
end
end
这是解决此问题的可行方法吗?特别是我对模型中的编码不是很熟悉。
非常感谢您提供的任何帮助。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 actionmailer named-scope rails-models