我正试图在我的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_by
是nil
,您正在显示的特定记录上没有设置值。
您必须对这种情况进行处理,或者通过存在验证(或在顶部进行db验证)确保due_by
始终存在。
处理nil
due_by
的一个解决方案是:
class Task < ActiveRecord::Base
belongs_to :category
def date_format
due_by&.strftime("%a, %b %-d %Y") # By adding `&.`
end
end