0

Railsカスケード削除を実行しようとする1対多の関連付けを持つ2つのモデルがあります。

私はレールにかなり慣れていないので、できる限りのことを試しましたが、まだ機能しません...

ここに私の2つのモデルがあります

class CmsHomeSlide < ActiveRecord::Base
    attr_accessible :slide_order, :start_datetime, :end_datetime, :slide_type, :header, :headline, :cta_text, :cta_link, :active
    has_many :cms_home_slide_detail, :dependent => :delete_all
    validates_presence_of :slide_type, :slide_order
end

class CmsHomeSlideDetail < ActiveRecord::Base
    attr_accessible :start_datetime, :end_datetime, :position, :image_url, :link, :cms_home_slide, :active
    belongs_to :cms_home_slide
end

そして、私が使用しているテストスクリプト(ランナーとして、しかし開発環境とテスト環境は同じように失敗します)

CmsHomeSlide.delete_all
CmsHomeSlideDetail.delete_all

slide = Factory(:home_slide)
det1 = Factory(:home_slide_detail, :cms_home_slide => slide, :position => 1)
det2 = Factory(:home_slide_detail, :cms_home_slide => slide, :position => 2)

puts "Slides length #{CmsHomeSlide.all.length}"
puts "Details length #{CmsHomeSlideDetail.all.length}"

slide.delete

puts "Slides length #{CmsHomeSlide.all.length}"
puts "Details length #{CmsHomeSlideDetail.all.length}"

出力は

Slides length 1
Details length 2
Slides length 0
Details length 2

私は何が欠けていますか?

4

1 に答える 1

2

:dependent => :deleteまたは使用する必要があります:dependent => :destroy

ガイドから:

:dependent オプションを :destroy に設定すると、このオブジェクトを削除すると、関連付けられたオブジェクトの destroy メソッドが呼び出され、そのオブジェクトが削除されます。:dependent オプションを :delete に設定すると、このオブジェクトを削除すると、destroy メソッドを呼び出さずに関連オブジェクトが削除されます。

http://guides.rubyonrails.org/association_basics.html

于 2012-04-30T21:11:17.273 に答える