更新表列

时间:2012-07-28 10:41:39

标签: ruby database datamapper

我将datamapper用于数据库。我有一张桌子。

class ZedTable
  include DataMapper::Resource
  property :id,         Serial
  property :label,       String 
  property :now,    Boolean, :default => false  

  before :save do 
    ZedTable.all.update(:now => false)
    self.now = true
  end
end

也就是说,我只想要一个值true。但是当我保存数据时,我得到一个错误。

Failure/Error: Unable to find matching line from backtrace
 SystemStackError:
   stack level too deep

为什么呢?我该如何解决这个问题? 感谢。

1 个答案:

答案 0 :(得分:0)

你得到stack too deep,因为当你致电update时,它会再次呼叫before :save。你需要的方法是update!,它会绕过钩子。