我正在尝试为Rails应用设置自定义佣金任务,该应用会检查您的位置是否在街道清洁限制的特定区域内。如果是,您可以单击“提醒我”按钮,将用户ID和限制ID保存到提醒表。
我让Rufus gem每15分钟运行一次rake任务。
我当时想要的是rake任务,检查当前时间和日期与限制ID对应的日期和开始时间,如果在30分钟内,它应该通过电子邮件发送给用户移动他们的车。 / p>
当我运行下面的当前代码时,我收到此错误:
rake aborted!
undefined method `reminders' for # <ActiveRecord::Relation::ActiveRecord_Relation_Day:0x007fb38c3274f8>
/Users/m/WDI/park_pointer/lib/tasks/reminder.rake:11:in `block (2 levels) in <top (required)>'
Tasks: TOP => reminder:mail_users
这是我的整个项目:https://github.com/mnicole/park_pointer
但是rake任务的代码是:
namespace :reminder do
desc "REMINDER"
task :mail_users => :environment do
time = Time.new
t = Time.now
today = Day.where(:id => time.wday + 1) #returns 0 for sunday, etc
@reminders = today.reminders
@reminders.each do |reminder|
@reminder = reminder
reminder_time_in_mins = restriction.start_time.hour * 60
current_time_in_mins = (Time.now.hour * 60) + Time.now.min
# last_time_in_mins = record.last.hour * 60 + record.last.min
if current_time_in_mins > (reminder_time_in_mins - 30)
@user = User.find(reminder.user_id.last)
UserMailer.reminder_email(user_id).deliver!
end
end
end
end
我认为我几乎就在那里,但我已经在这个问题上工作了几个月而且对下一步感到茫然。
提前致谢!!
-Michele
答案 0 :(得分:1)
问题在于这一行:
today = Day.where(:id => time.wday + 1)
这不会返回记录,它会返回ActiveRecord::Relation
,这只表示查询尚未进行评估。 (它这样做是为了你可以将过滤器链接在一起,只有当你迭代它时它才会被评估为SQL。
在不知道你的Day
模型是什么样的情况下,我想你想要的是:
today = Day.where(:id => time.wday + 1).first
这将返回第一个结果,如果没有结果,则返回nil
。然后,如果today
为非零,则它将采用reminders
方法。