Rails自定义Rake任务没有方法错误

时间:2014-04-12 19:22:22

标签: ruby-on-rails ruby rake rake-task rufus-scheduler

我正在尝试为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

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

today = Day.where(:id => time.wday + 1)

这不会返回记录,它会返回ActiveRecord::Relation,这只表示查询尚未进行评估。 (它这样做是为了你可以将过滤器链接在一起,只有当你迭代它时它才会被评估为SQL。

在不知道你的Day模型是什么样的情况下,我想你想要的是:

today = Day.where(:id => time.wday + 1).first

这将返回第一个结果,如果没有结果,则返回nil。然后,如果today为非零,则它将采用reminders方法。