NoMethodError语言 - nil:NilClass的未定义方法' strftime '



我正试图在我的Ruby项目中使用gem 'strftime'。下面是我在代码中使用它的方法:

TaskController:类TasksController<程序控制器>

get '/tasks' do 
Task.all.to_json(methods: [:date_format, :category])
end

get '/tasks/:id' do 
Task.find(params[:id]).to_json
end

post '/tasks' do 
category = Category.find_by(name: params[:category])
task = Task.create(
description: params[:description],
completed: false,
due_by: params[:due_by],
reminder: params[:reminder],
category: category
)
task.to_json(methods: [:date_format, :category])
end

patch '/tasks/:id' do
task = Task.find(params[:id])
task.update(
completed: params[:completed],
reminder: params[:reminder]
)
task.to_json
end

delete '/tasks/:id' do
task = Task.find(params[:id])
task.destroy
task.to_json
end

delete '/categories/:id' do
category = Category.find(params[:id])
category.destroy
category.to_json
end
end

任务模型:

class Task < ActiveRecord::Base 
belongs_to :category 
def date_format
due_by.strftime("%a, %b %-d %Y")
end

end

当我启动我的rake服务器时,我得到以下错误:

NoMethodError - undefined method `strftime' for nil:NilClass
Did you mean?  strfd:

我不知道为什么会出现未定义的方法。你发现代码有什么问题吗?谢谢你!

很可能您的due_bynil,您正在显示的特定记录上没有设置值。

您必须对这种情况进行处理,或者通过存在验证(或在顶部进行db验证)确保due_by始终存在。

处理nildue_by的一个解决方案是:

class Task < ActiveRecord::Base
belongs_to :category
def date_format
due_by&.strftime("%a, %b %-d %Y") # By adding `&.`
end
end

相关内容

  • 没有找到相关文章

最新更新