2012-04-30 13 views
0

私は1対多の関連性を持つ2つのモデルを用意しています。:dependent =>:delete_all not working

私はレールにかなり新しいだと私は私ができるすべてを試みたが、私はまだそれが仕事を得ることができない...ここで

は私の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 

され、テスト私が使用しているスクリプト(ランナーとして、しかし、DEV環境やテスト環境では、同じように失敗する)

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}" 

出力が

です

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

答えて

2

あなたはガイドから:dependent => :deleteまたは:dependent => :destroy

を使用する必要があります。

あなたが設定した場合:への依存オプション:破壊を、そしてこの オブジェクトを削除すると関連付けられているオブジェクトにdestroyメソッドを呼び出します。そのオブジェクト を削除してください。 :dependentオプションを:deleteに設定すると、 このオブジェクトを削除すると、 destroyメソッドを呼び出さずに、関連付けられたオブジェクトが削除されます。

しようとしました

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

+1

':::依存オプションのいずれかを期待:破壊し、:DELETE_ALLは、:(制限:無効または:DELETE'、これは'モデルを壊しています:: configure_dependency_for_has_manyでは、動作していませんdelete)(ArgumentError) ' – Damp

+0

とdestroyは何もしません。同じ問題 – Damp

+2

また、' Model.destroy_all'を呼び出す必要があります。 'delete_all'を使うと、コールバックは実行されません。 –