1

モデルを更新しない datamapper に問題があります。問題なくモデルを作成して保存できます。raise_on_save_failureの戻り値を有効にして確認しました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

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

4

2 に答える 2

2

削除attr_accessorすると問題が修正されました。私の研究からattr_accessor、データベースにない属性に使用されます。

于 2012-04-14T03:50:57.027 に答える
1

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

# This generates an INSERT
user = User.create(:login => 'kintaro', :email => 'kintaro@example.com')

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

ただし、これを行うと、次のUPDATEようになります。

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

多分これは何が起こっているのですか?

于 2012-04-13T17:46:23.267 に答える