Sinatra 正在销毁Datamapper中的依赖项

Sinatra 正在销毁Datamapper中的依赖项,sinatra,datamapper,Sinatra,Datamapper,使用Datamapper,我有一个模型相册,其中有n,:photos,其中有一个回形针::Resource 如果使用ActiveRecord,我会: has_many :photos, dependent: :destroy 在我的相册模型中,为了在相册的同时删除照片,但使用Datamapper,您似乎必须滚动自己的照片。在Sinatra中,要删除我的相册,请执行以下操作: delete '/albums/:id' do a = Album.get params[:id] a.des

使用Datamapper,我有一个模型相册,其中有n,:photos,其中有一个回形针::Resource

如果使用ActiveRecord,我会:

has_many :photos, dependent: :destroy
在我的相册模型中,为了在相册的同时删除照片,但使用Datamapper,您似乎必须滚动自己的照片。在Sinatra中,要删除我的相册,请执行以下操作:

delete '/albums/:id' do
  a = Album.get params[:id] 
  a.destroy
  redirect '/'
end
以及相册模型中的前置过滤器:

before :destroy do
  photos.destroy
end
但是从不调用before过滤器

如果我使用爆炸法,a.摧毁!,相册已销毁,但照片未销毁

不会产生错误,也不会引发异常

更新

存在错误,但错误哈希为空:

INFO -- : #<DataMapper::Validations::ValidationErrors:0x13740dc @resource=#<Album @id=2 @name="Quaver" @created_at=#<DateTime: 2013-02-07T10:30:36+00:00 (5895194251/2400,0/1,2299161)> @updated_at=#<DateTime: 2013-02-07T10:30:36+00:00 (5895194251/2400,0/1,2299161)>>, @errors={}>
因此,由于ValidationErrors,不会调用before筛选器,但是如果没有显式设置它们,它们从何而来


感谢您的帮助。谢谢。

显然,当您使用:

require 'data_mapper'
您隐式使用的是dm约束,默认情况下,它保护依赖模型。只需授予销毁权限(与ActiveRecord非常相似)即可实现以下目的:

has n, :photos, constraint: :destroy

该死的痛

你看起来好吗?嗨,马特。是的,我有;但我真的想理解为什么这里甚至没有调用before过滤器。这是一个学习练习。谢谢。FWIW:
dm核心
gem不包括
dm约束
。这必须单独包括在内。
has n, :photos, constraint: :destroy