Ruby on rails Rails dependent::销毁所属的
我有两种型号:Ruby on rails Rails dependent::销毁所属的,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有两种型号: # photo.rb belongs_to :batch, inverse_of: :photos # batch.rb has_many :photos, inverse_of: :batch 我只想在最后一张照片被销毁时销毁一批照片 # photo.rb belongs_to :batch, inverse_of: :photos, dependent: :destroy 如果我销毁了该批次的任何照片,将删除该批次。在rails中有什么简单的方法可以做到这一点吗?或者我
# photo.rb
belongs_to :batch, inverse_of: :photos
# batch.rb
has_many :photos, inverse_of: :batch
我只想在最后一张照片被销毁时销毁一批照片
# photo.rb
belongs_to :batch, inverse_of: :photos, dependent: :destroy
如果我销毁了该批次的任何照片,将删除该批次。在rails中有什么简单的方法可以做到这一点吗?或者我必须做一些丑陋的事情,比如在
照片中处理它#销毁?必须手动完成。以下代码适用于Rails4.x
一个简单的方法是在照片模型中使用after_destroy
过滤器检查父批次是否为空,如果为空,则销毁它
# photo.rb
after_destroy :destroy_empty_batch
def destroy_empty_batch
batch.destroy if batch.photos.empty?
end
然而,允许一个模型操纵另一个模型的对象是不好的设计。正确的方法是在控制器中。不要在模型中使用过滤器,只需向照片控制器添加两行:
# photos_controller.rb
def destroy
batch = @photo.batch # set a batch pointer
@photo.destroy
batch.destroy if @batch.empty? # check batch, destroy if empty
# ...respond_to block...
end
听起来不错。只是想确认我没有错过更好的东西。