我正在使用ruby 1.9.2和sinatra 1.3.2,Datamapper 我收到错误:“无法将nil转换为Hash”
>在/ new_record我有一个表单,当提交表单(带有一些空白字段)而不是获取验证消息时,我收到此错误!此处发布'/ new_record' - 因为我使用以前形式的某些值填充此表单
post '/new_record' do
@projects = Project.all
@date = DateTime.parse(params[:report][:date])
erb :new_record
end
post '/create_record' do
@user = User.get(current_user.id)
if @user.records.create(params[:record])
flash(:notice => "Report created successfully!")
redirect "/"
else
@projects = Project.all
@date = DateTime.parse(params[:report][:date])
erb :new_record
end
我无法猜测为什么,因为相似的形式效果很好:
get '/new' do
#session[:user_id] = nil
title "Create new account"
erb :new_user
end
post '/create' do
@user = User.new(params[:user])
if @user.save
session[:user_id] = nil
redirect "/"
else
erb :new_user
end
end
我认为它与@user.records.create(params[:record])
创建方法有关,它试图构建哈希,但为什么如果它不能构建哈希就不要抛出它无法保存的错误(构建) @ user.records依赖?
有什么方法可以解决这个问题吗?因为我想建立使用关系的记录。
谢谢你的建议!
答案 0 :(得分:1)
DataMapper不会抛出无法保存的错误,因为它甚至在尝试保存记录之前就检测到了问题。 (另请注意,默认情况下,DataMapper不会抛出异常 - 您必须启用它。)
create
使用您想要设置为输入值的哈希值。因此,根据您报告的mesasge,显然已将nil
传递给它 - 并且它抱怨它无法将nil
转换为Hash
。
尝试这样的事情:
@user.records.create({:column => params[:record]})