2

Datamapperを使用して、Paperclip :: Resourceを持つn、:photosを持つモデルアルバムがあります

ActiveRecordがあれば、私は次のようになります。

has_many :photos, dependent: :destroy

私のアルバムモデルでは、アルバムと同時に写真を削除するために、しかしDatamapperを使用すると、自分でロールする必要があるようです。シナトラでは、私が持っているアルバムを削除するには:

delete '/albums/:id' do
  a = Album.get params[:id] 
  a.destroy
  redirect '/'
end

アルバムモデルのbeforeフィルター:

before :destroy do
  photos.destroy
end

ただし、beforeフィルターが呼び出されることはありません。

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 に答える