我有以下的小例子,DataMapper的模式:爲什麼我不能稱self.save!在Ruby DataMapper之後:創建回調?
# model.rb
require 'data_mapper'
class Job
include DataMapper::Resource
after :create, :create_id_based_data
property :id, Serial
property :magicNumber, String
def create_id_based_data
self.magicNumber = "#{self.id}_#{Random.rand()}"
self.save!
end
end
DataMapper.setup(:default, 'sqlite::memory:')
DataMapper.auto_migrate!
如果我跑在IRB的代碼,「magicNumber」不保存到數據庫中:
irb -r ./model.rb
2.2.1 :001 > Job.all
=> []
2.2.1 :002 > Job.create
=> #<Job @id=1 @magicNumber="1_0.6245356525078689">
2.2.1 :003 > Job.all
=> [#<Job @id=1 @magicNumber=nil>]
我的理解是,DataMapper的防止在save
回調中重複呼叫save
,但不應在create
之後允許在save
呼叫之後掛斷?即使正常的save
呼叫是不允許的,是否不應該將save!
呼叫繞過所有的回叫,因此是允許的?
我正在運行的DataMapper V1.2.0 – winni2k