我有这个模型的更新值无法保存在DataMapper的模型
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不喜欢我正在做的事情。我知道datamapper不喜欢“脏”的记录,但我不认为这是这种情况,对吧?
不知道这是否适用于dm,但是会触发save方法并查看是否会抛出错误:@ user.save! – three 2012-03-17 11:42:37
不,datamapper实际上遵循'@ user.save!'的ruby约定是危险的方法。试试'@ user.save_or_raise'。 – Reactormonk 2012-03-17 14:56:33
它似乎在datamapper中设置User.raise_on_save_failure = true。我确实得到这个错误#。不知道该从哪里出发,但它确认我至少要保存它。 :) –
wuliwong
2012-03-17 19:30:06