2016-04-27 10 views
1

私のコードは、モデルの新しいインスタンスを作成するときに自動的にカテゴリを作成します。ここにモデルの1つのコードがあります。after_destroyカテゴリを削除する

class Grow < ActiveRecord::Base 
belongs_to :category 

after_create do 
    Category.create(name: self.title) 
end 

before_destroy do 
    Category.destroy(name: self.title) 
end 

エンド

作品を作成するに、しかし破壊は

SQLite3::SQLException: no such column: id.name: SELECT "categories".* 
     FROM "categories" WHERE "id"."name" = 'My very first grow room' LIMIT 1 

私がこの問題を解決する方法上の任意のアイデアを、このエラーを与えますか?

答えて

4

これを試してみてください:破壊念頭に置いて

Category.find_by(name: self.title).destroy 

クマはあなたがによってトリガーされているカテゴリーのすべてのコールバックをトリガしますが、削除させていただきますんではない

これは、ActiveRecordの(destroy)の下でやっていることですフード:

# File activerecord/lib/active_record/base.rb, line 2614 
    def destroy 
    unless new_record? 
     connection.delete(
     "DELETE FROM #{self.class.quoted_table_name} " + 
     "WHERE #{connection.quote_column_name(self.class.primary_key)} = #{quoted_id}", 
     "#{self.class.name} Destroy" 
    ) 
    end 

    @destroyed = true 
    freeze 
    end 
+0

これはすばらしい反応でした。私はレコードから削除したいときに余分なコールバックをトリガーする必要がないので、私はdeleteオプションを使いました。 – mGarsteck

関連する問題