由于某种原因,我无法使用 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")
两者都应该无一例外地工作。