我有這個模型的更新值無法保存在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