由于某种原因,我无法使用rake任务通过ActiveRecord访问表中的列。我的rake任务看起来像这样:
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
列,可能会出现什么问题?存在的任何其他列名称都不起作用。
答案 0 :(得分:2)
问题不在于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")
两者都应该没有例外。