Ale*_*kin 4 ruby hook datamapper
无法理解为什么钩子不起作用.我有以下型号:
class DirItem
include DataMapper::Resource
# property <name>, <type>
property :id, Serial
property :dir_cat_id, Integer, :required => true
property :title, String, :required => true
property :price, Integer, :default => 0
belongs_to :dir_cat
has n, :dir_photos
has n, :dir_field_values
before :destroy do
logger.debug "==============DESTROYING ITEM ##{id}, TITLE
#{title}"
dir_field_values.destroy
dir_photos.destroy
end
end
Run Code Online (Sandbox Code Playgroud)
当我destroy从我的应用程序或irb 调用方法时,它返回false.该errors哈希为空,则日志消息不打印和记录将不会删除.
小智 5
这个钩子适合我(ruby 1.9.2/DM 1.0.2):
require 'rubygems'
require 'dm-core'
require 'dm-migrations'
# setup the logger
DataMapper::Logger.new($stdout, :debug)
# connect to the DB
DataMapper.setup(:default, 'sqlite3::memory:')
class DirItem
include DataMapper::Resource
# property <name>, <type>
property :id, Serial
property :dir_cat_id, Integer, :required => true
property :title, String, :required => true
property :price, Integer, :default => 0
has n, :dir_photos
before :destroy do
dir_photos.destroy
end
end
class DirPhoto
include DataMapper::Resource
property :id, Serial
belongs_to :dir_item
end
DataMapper.finalize.auto_migrate!
@i = DirItem.create(:title => 'Title', :dir_cat_id => 1)
@i.dir_photos.create
@i.dir_photos.create
@i.dir_photos.create
@i.destroy
Run Code Online (Sandbox Code Playgroud)
DM记录器显示每个dir_photos在dir_item之前被销毁.您可能希望查看使用钩子而不是使用钩子dm-constraints.有类似的东西:
has n, :dir_photos, :constraint => :destroy
Run Code Online (Sandbox Code Playgroud)
您可以确保在销毁dir_item时将销毁所有dir_photos,并且这也将由数据库级外键约束强制执行.
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |