【问题标题】:can't convert nil into Hash无法将 nil 转换为 Hash
【发布时间】:2012-04-08 17:15:29
【问题描述】:

我正在使用 ruby​​ 1.9.2 和 sinatra 1.3.2,Datamapper 我收到错误:“无法将 nil 转换为哈希”

在 /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]) 与 create 方法有关,它尝试构建哈希,但为什么如果它不能构建哈希就不要抛出无法保存(构建)@user 的错误.records 依赖? 有没有办法解决这个问题?因为我想使用关系建立记录。 感谢您的建议!

【问题讨论】:

    标签: sinatra datamapper


    【解决方案1】:

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

    create 采用您要设置为输入的值的散列。因此,根据您报告的消息,显然 nil 已传递给它 - 它抱怨它无法将 nil 转换为 Hash

    试试这样的:

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

    【讨论】:

    • 谢谢!我认为接下来的事情会发生:我在字段中添加了存在验证,并认为 has 的一些参数将被正确设置,其他的保留 nil,并且在保存记录时,如果 @record.save "do" else,我将按如下方式处理它erb :template end 并在模板中显示验证错误
    • 您可以使用验证,但您必须通过此hash :P 我注意到您通常不会对您的问题的答案进行投票。推荐好的答案(即使是那些你没有选择正确的答案)是一种很好的做法,因为它鼓励人们回答你可能提出的其他问题;)
    • 对不起,我想今天我的声望变成了 17,所以我没有注意到我有投票的能力。感谢帮助! PS。赞成你的答案)
    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多