我有以下型号
class Category < ActiveRecord::Base
has_many :posts
before_destroy :reset_posts_category
def reset_posts_category
???
end
end
class Post < ActiveRecord::Base
belongs_to :category
end
我想要做的是创建一个回调,所以在删除类别之前更新属于此类别的所有帖子 以设置默认值(post.category_id = 0
) 。我怎么能这样做?
答案 0 :(得分:2)
你可以试试这个,
class Category < ActiveRecord::Base
has_many :posts, dependent: :nullify
end
希望这会对你有所帮助。
答案 1 :(得分:2)
我建议您查看:dependent
has_many
将代码更改为
has_many :posts, dependent: :nullify
Rails会自动将您数据库中的所有posts
设置为null
。
其他dependent
选项包括:
:destroy
使用回调调用所有对象的销毁:delete_all
直接从db中删除所有记录而不回调:restrict_with_exception
提出一个例外:restrict_with_error
向“错误答案 2 :(得分:1)
试试这个:
class Category < ActiveRecord::Base
has_many :posts
before_destroy :reset_posts_category
def reset_posts_category
self.posts.update_all(category_id: 0)
end
end
您也可以使用@Hardik Upadhyay和@ slowjack2k所说的dependent :nullify
,这比更新category_id: 0
要好。