Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails dependent::销毁所属的_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

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

听起来不错。只是想确认我没有错过更好的东西。