не может конвертировать ноль в хэш - PullRequest
0 голосов
/ 24 марта 2012

Я использую ruby ​​1.9.2 и sinatra 1.3.2, Datamapper Я получаю сообщение об ошибке: «невозможно преобразовать ноль в хэш»

в / 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, что он пытается создать хеш, но почему, если он не может создать хеш, просто не выдает ошибку, которую он не может сохранить (build) @user .records зависимость? Есть ли способ обойти это? Потому что я хотел бы создать запись, используя отношения. Спасибо за совет!

1 Ответ

1 голос
/ 25 марта 2012

DataMapper не выдает ошибку, которую не удалось сохранить, поскольку обнаруживает проблему еще до того, как попытается сохранить запись. (Также обратите внимание, что по умолчанию DataMapper не генерирует исключения в любом случае - вы должны включить его.)

create принимает хеш со значениями, которые вы хотите установить в качестве входных данных. Итак, согласно сообщению, о котором вы сообщаете, по-видимому, ему было передано nil - и он жалуется, что не может преобразовать nil в Hash.

Попробуйте что-то вроде этого:

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