无法将nil转换为Hash

时间:2012-03-24 10:56:41

标签: sinatra datamapper

我正在使用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依赖? 有什么方法可以解决这个问题吗?因为我想建立使用关系的记录。 谢谢你的建议!

1 个答案:

答案 0 :(得分:1)

DataMapper不会抛出无法保存的错误,因为它甚至在尝试保存记录之前就检测到了问题。 (另请注意,默认情况下,DataMapper不会抛出异常 - 您必须启用它。)

create使用您想要设置为输入值的哈希值。因此,根据您报告的mesasge,显然已将nil传递给它 - 并且它抱怨它无法将nil转换为Hash

尝试这样的事情:

@user.records.create({:column => params[:record]})