1

再帰的な破棄がどのように機能するかについての私の理解を確認してください。

多くの投稿を含むブログ オブジェクトがあります。投稿には、投稿が作成されるたびに作成されるニュースフィード オブジェクトがあります。ブログを削除すると、投稿は削除されますが、投稿のニュースフィード オブジェクトは削除されず、「ゴースト」ニュースフィード オブジェクトが残ります。

モデル > blog.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 コントローラーの 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

投稿の destroy 関数のそのコードは呼び出されていないため、newfeed オブジェクトは破棄されていません。依存関係の破棄機能に関する私の理解は間違っていますか?

ニュースフィード オブジェクトは、他のタイプのユーザー アクション (新しい誰かと友達になる、または新しいブログを作成するなど) によってトリガーされるため、ニュースフィードの種類によって区別されるため、特に、ニュースフィードと投稿オブジェクトの間に属している関係と has_many 関係を作成することは避けたいと考えています。 content1 変数。

4

1 に答える 1

2

次のように、カスタム フィード削除コードを Post モデルに移動することをお勧めします。

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 が空の場合、exists に問題があるのではないでしょうか? 関数。しかし、このコードをこのコールバック関数に移動すると、投稿が削除されるたびに関連するフィードが削除されるようになります。

コントローラーで、通常どおり @post.destroy を呼び出すだけで、残りは自動的に処理されます。

于 2013-07-09T18:35:53.433 に答える