Rake任务使用未定义的方法`created_at' - 无法访问列

时间:2016-01-19 08:43:03

标签: ruby-on-rails ruby-on-rails-4

由于某种原因,我无法使用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列,可能会出现什么问题?存在的任何其他列名称都不起作用。

1 个答案:

答案 0 :(得分:2)

问题不在于created_at。您的一些用户很可能没有任何条目,因此user.entries.lastnilnil没有名为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")

两者都应该没有例外。