使用未定义的方法"created_at"回复 Rake 任务 – 无法访问列



由于某种原因,我无法使用 rake 任务通过 ActiveRecord 访问表中的列。我的耙子任务如下所示:

task :reminder => :environment do
  User.all.each do |user|
    if user.entries.last.created_at.strftime("%A, %d of %B %Y") == 3.days.ago.strftime("%A, %d of %B %Y")
      UserMail.reminder(user).deliver
    end
  end
end

在执行时,我正在NoMethodError: undefined method 'created_at' for nil:NilClass回来.但是,当我不使用created_at而只是user.entries.last时,我不会收到错误。这表明连接已建立(感谢:environment)。

我无法访问表的created_at列可能出现什么问题?存在的任何其他列名也不起作用。

问题不在于created_at。很可能您的某些用户没有任何条目,因此user.entries.last nil,并且nil没有称为 created_at 的方法。如果要将提醒发送给没有条目的所有用户,则应按如下方式更改条件:

if user.entries.empty? || user.entries.last.created_at.strftime("%A, %d of %B %Y") == 3.days.ago.strftime("%A, %d of %B %Y")

或者,如果您不想向没有条目的用户发送提醒:

if !user.entries.empty? && user.entries.last.created_at.strftime("%A, %d of %B %Y") == 3.days.ago.strftime("%A, %d of %B %Y")

两者都应该无一例外地工作。

最新更新