2

使用 Datamapper,我有一个模型 Album,它有 n, :photos 有一个 Paperclip::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

但从未调用过之前的过滤器。

如果我使用 bang 方法 a.destroy!,则相册会被销毁,但照片不会。

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

更新

有错误,但错误哈希为空:

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={}>

很明显我有验证问题。但是我没有在我的模型中设置任何验证:

class Photo  
  include DataMapper::Resource
  include Paperclip::Resource  

  property :id, Serial
  property :title, String
  property :created_at, DateTime  
  property :updated_at, DateTime

  has_attached_file :data, url: "/:attachment/:id/:style/:basename.:extension",
                       path: "#    {APP_ROOT}/public/:attachment/:id/:style/:basename.:extension"
  belongs_to :album
end

class Album  
  include DataMapper::Resource  
  property :id, Serial
  property :name, String
  property :created_at, DateTime  
  property :updated_at, DateTime
  has n, :photos

  before :destroy do
    photos.destroy
  end
end

因此,由于 ValidationErrors 而没有调用 before 过滤器,但是当它们没有被显式设置时,它们是从哪里来的呢?

任何帮助,感激不尽。谢谢。

4

1 回答 1

3

显然当你使用:

require 'data_mapper'

您正在隐式使用 dm-constraints,它默认保护依赖模型。简单地授予销毁权限(很像 ActiveRecord)就可以了:

has n, :photos, constraint: :destroy

妈的好疼!

于 2013-02-07T15:39:10.420 回答