我在使用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
)仅显示用于检索SELECT
和user
的{{1}}个查询,这就是全部。为什么我能够user_profile
新创建的模型,但不允许save
相同的模型?
答案 0 :(得分:2)
删除attr_accessor
解决了问题。从我的研究中attr_accessor
用于不在数据库中的属性。
答案 1 :(得分:1)
DataMapper的save
和update
不一定产生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')
也许这就是发生的事情?