2012-04-11 11 views
1

モデルを更新していないdatamapperに問題があります。問題なくモデルを作成して保存できます。私はraise_on_save_failureを有効にして戻り値updateをチェックしましたが、エラーは表示されません。ここでDatamapper "Update"はレコードを更新しません

はモデルです:それはコントローラで更新された場合

class UserProfile 
    include DataMapper::Resource 
    attr_accessor :id, :wants_hints, :is_beta_user 
    property :id, Serial #auto-increment integer key 
    property :is_beta_user, Boolean 
    property :wants_hints, Boolean 
    has 1, :user, :through => Resource 
end 

そして、ここでは、次のとおりです。

if user = User.get(request.session[:user])  
    if request.params[:user_profile]   
    beta = request.params[:user_profile].has_key?('is_beta_user')   
    hints = request.params[:user_profile].has_key?('wants_hints')   
    user.user_profile.update({:is_beta_user => beta, :wants_hints => hints}) # returns true 
    Log.puts user.user_profile.errors.each {|e| Log.puts e.to_s} # returns empty list [] 
    end  
end 

コントローラは常にtrueを返し、エラーがでそこになることはありませんupdate呼び出された場合エラーリスト:debugに設定されたdatamapperログは、useruser_profileを取得するためのクエリはSELECTのクエリのみを表示します。なぜ私はsave新しく作成されたモデルをできるようになりますが、同じモデルupdateに許可されていないのですか?

答えて

2

attr_accessorを削除すると問題が解決しました。私の研究では、attr_accessorはデータベースにない属性に使われています。

1

DataMapperのsaveupdateは必ずしもUPDATE文を生成するとは限りません。モデルオブジェクトが保持するデータが変更された場合にのみ実行されます。したがって、たとえば、次のコードでupdatetrueを返しますが、UPDATEを生成しません。

# This generates an INSERT 
user = User.create(:login => 'kintaro', :email => '[email protected]') 

# This does NOT generate an UPDATE 
user.update(:login => 'kintaro') 

あなたがこれを行う場合は、しかし、UPDATEが生成されます:たぶん

# This generates an UPDATE 
user.update(:login => 'kintaro22') 

この何が起こっているのですか?

+0

チェックしてダブルチェックします。属性を新しい値に確実に更新しています。 – nathan

関連する問題