Datamapper“Update”不更新记录

时间:2012-04-11 13:39:44

标签: ruby datamapper

我在使用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,错误列表中永远不会出现错误。数据映射器日志(设置为:debug)仅显示用于检索SELECTuser的{​​{1}}个查询,这就是全部。为什么我能够user_profile新创建的模型,但不允许save相同的模型?

2 个答案:

答案 0 :(得分:2)

删除attr_accessor解决了问题。从我的研究中attr_accessor用于不在数据库中的属性。

答案 1 :(得分:1)

DataMapper的saveupdate不一定产生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')

也许这就是发生的事情?

相关问题