2016-03-25 9 views
0

私のモデルは次のようになります。複数のbelongs_toを持つ子レコードを削除するにはどうすればよいですか?

class Project < ActiveRecord::Base 
has_many :entries 
end 

class User < ActiveRecord::Base 
has_many :entries 
end 

class Entry < ActiveRecord::Base 
belongs_to :user 
belongs_to :project 
end 

が、私はそれが削除されるとき、プロジェクトに依存してすべてのエントリを削除したいです。私はIDとしてUUIDのPostgresを使用しています。

class Project < ActiveRecord::Base 
has_many :entries, dependent: :destroy 
end 

そして、この:

class Project < ActiveRecord::Base 
has_many :entries 

before_destroy { |project| Entry.destroy_all "project_id = #{project.id}" } 
end 

しかし、プロジェクトが削除されるとき、エントリが残っている私はこれを試してみました。彼らはまだ別の親オブジェクトを持っているという理由があると思います。

私も自分のコントローラからそれらを削除しようとしました:問題は何、私が何かを

def destroy 
    @project = current_company.projects.find(params[:id]) 
    @project.time_entries.delete_all 
    ... 
end 

行方不明ですか?

答えて

1

has_many :entries, dependent: :destroyの行が有効です。ただし、それはすべてprojectの削除方法によって異なります。あなたは

@project.delete 

を言うならdeleteはすべてentriesを削除しますコールバックを、スキップとしてそれは、働くことはありません。その代わり、destroyはコールコールバックを行うように、それが動作するはず

@project.destroy 

のようなものを使用してみてください。ところで、delete_alldestroy_allの亜種についても同じ規則が適用されます。

+0

うわー、私の悪い、私はそれらの2つの方法の違いがあったことを認識しませんでした。それを明確にしてくれてありがとう! –

関連する問題