【问题标题】:Rails Custom Rake Task no method errorRails 自定义 Rake 任务没有方法错误
【发布时间】:2014-04-12 19:22:22
【问题描述】:

我正在尝试为 Rails 应用程序设置自定义 rake 任务,以检查您的位置是否在具有街道清洁限制的特定区域内。如果是,您可以单击“提醒我”按钮,将用户 ID 和限制 ID 保存到提醒表中。

我让 Rufus gem 每 15 分钟运行一次 rake 任务。

然后我想要的是 rake 任务来检查当前时间和日期以及与限制 ID 对应的日期和开始时间,如果在 30 分钟内,它应该通过电子邮件向用户移动他们的汽车。

当我在下面运行我当前的代码时,我得到了这个错误:

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

我想我快到了,但我已经为此工作了几个月,对下一步有点茫然。

提前致谢!!

-米歇尔

【问题讨论】:

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


    【解决方案1】:

    问题出在这一行:

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

    这不是返回记录,而是返回一个ActiveRecord::Relation,这意味着该查询尚未被评估。 (这样做是为了让您可以将过滤器链接在一起,并且只有在您对其进行迭代时才会将其评估为 SQL。

    在不知道您的Day 模型的情况下,我认为您想要的是:

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

    这将返回第一个结果,如果没有结果,则返回nil。那么如果today 不为nil,就会有reminders 方法。

    【讨论】:

    • 谢谢!摆脱了错误并给了我一个新的错误,所以朝着正确的方向迈出了一步!
    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多