Rails Destroy依赖项未调用Destroy函数



请检查我对递归破坏工作的理解?

我有一个博客对象,里面有很多帖子。帖子会有一个newsfeed对象,每次创建帖子时都会创建该对象。当我删除博客时,帖子会被删除,但帖子上的新闻源对象不会被删除,这给我留下了"幽灵"新闻源对象。

模型>博客.rb

class Blog < ActiveRecord::Base
  attr_accessible :description, :title, :user_id, :cover
  belongs_to :user
  has_many :posts, :dependent => :destroy
end

型号>post.rb

class Post < ActiveRecord::Base
  attr_accessible :blog_id, :content_1, :type, :user_id, :media, :picture, :event_id
  belongs_to :blog
  belongs_to :user
end

所以,当我呼吁销毁一个博客时,它会收集所有的帖子并销毁它们。太棒了!但我在post-controller的destroy函数中有一段特殊的自定义代码,它调用newfeeds的自定义销毁。没有人叫他。

控制器>post_controller.rb

def destroy
    @post = Post.find(params[:id])
    # Delete Feed on the creation of the post
    if Feed.exists?(:content1 => 'newpost', :content2 => params[:id])
        @feeds = Feed.where(:content1 => 'newpost', :content2 => params[:id])
    @feeds.each do |feed|
        feed.destroy
end
end
@post.destroy
   respond_to do |format|
     format.html { redirect_to redirect }
     format.json { head :no_content }
   end
end

post的destroy函数中的那部分代码没有被调用,所以newfeed对象没有被破坏。我对依赖销毁功能的理解是错误的吗?

我特别希望避免在新闻源和帖子对象之间创建belongs_to和has_many关系,因为新闻源对象是由其他类型的用户操作触发的,比如与新用户建立好友关系或创建新博客,这取决于content1变量中的新闻源类型。

我建议将自定义Feed删除代码移动到您的Post模型中,如do:

class Post
  before_destroy :cleanup
  def cleanup
    # Delete Feed on the creation of the post
    if Feed.exists?(:content1 => 'newpost', :content2 => id)
      @feeds = Feed.where(:content1 => 'newpost', :content2 => id)
      @feeds.each do |feed|
        feed.destroy
      end
    end
  end
end

现在,如果@feeds是空的,那么可能是存在问题?作用但是,将此代码移到此回调函数将确保在任何时候删除Post时,关联的提要都会被删除。

在你的控制器中,只需像往常一样拨打@post.destroy,其余的就会自行处理。

相关内容

  • 没有找到相关文章