Не удается сохранить обновления значений в модели datamapper - PullRequest
1 голос
/ 17 марта 2012

У меня есть эта модель

class User
  include DataMapper::Resource
  include BCrypt

  property :id, Serial
  property :email, String, :required => true
  property :password_hash, Text, :required => false
  property :user_name, String, :required => true
  property :birthdate, Date
  property :city, String
  property :state, String
  property :zip, String
  property :bio, Text
  property :validated, Boolean, :default => false
  property :validation_code, String
  property :created_at, DateTime
  property :updated_at, DateTime
end

У меня есть этот маршрут

get '/validate/:code/:user_id/?' do
  @user = User.get params[:user_id]

  if @user.validation_code == params[:code]
    @user.validated = true
    @user.save
  end

  erb :validate
end

@user.validated устанавливается в значение true, но не сохраняется. Я предполагаю, что это что-то очень простое, но я не могу понять это. Кто-нибудь знает, почему присвоение true для @ user.validated не сохраняется?

Спасибо.

------ Обновление ----------

Когда я говорю datamapper, чтобы поднять на сбой

User.raise_on_save_failure = true

Я получаю эту ошибку

#<DataMapper::SaveFailureError: User#save returned false, User was not saved>

Я знаю, что это немного, но я знаю, что я пытаюсь сохранить данные, и картографу не нравится то, что я делаю. Я знаю, что datamapper не любит «грязные» записи, но я не вижу, что дело здесь, верно?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2014

Согласно документации DataMapper длина строки по умолчанию составляет 50 символов. Просто используйте правильное значение в объявлении свойства:

    property :validation_code, String, :length => 500
2 голосов
/ 18 марта 2012

Вы, ребята, никак не могли понять это по информации, которую я предоставил.:) Проблема была в строке, для которой я генерировал: validation_code был на самом деле слишком длинным.Как только я урезал код валидации до нужного размера (я думаю, меньше 50 символов), все работает правильно.

Для меня это еще один урок, чтобы не срезать углы и добавлять вещи по одному.Вздох ....

...