0

私の Rails アプリがact_as_commentable_with_threading gem を使用して Recipe と Comment の関係を持ち、その Recipe gem にparanoid2 gem が構成されているとします。古いシステムから新しいシステムへの移行で、コメント テーブルにレコードを手動で挿入して新しいレコードを作成しましたが、誤ってすべてのレシピに対して重複したコメントを作成してしまいました。ここで、この SO questionの解決策を変更して、重複したレコードを削除したいと思いました。

# app/models/recipe.rb
class Recipe < ActiveRecord::Base
  acts_as_commentable
  paranoid

  # other configurations and methods

end


# app/models/comment.rb
class Comment < ActiveRecord::Base
  paranoid

  def self.dedupe_recipe_comments
    grouped = all.where(commentable_type: "Recipe").group_by{|model| [model.commentable_id,model.body,model.user_id,model.commentable_username] }
    grouped.values.each do |duplicates|
      first_one = duplicates.shift

      duplicates.each do |double| 
      puts "removing #{double.inspect} from table"
      double.destroy(force: true)
    end

  end

end

しかし、Rails コンソールでこの関数を呼び出すと、この関数はエラーを返します。たとえば、最初に重複したレコードの値idが 1480 であるとします。

ActiveRecord::RecordNotFound: /Users/yoonwaiyan/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.0/lib から 'id'=1480 のコメントが見つかりませんでした/active_record/relation/finder_methods.rb:320:`raise_record_not_found_exception!' で

しかし、を使用して同じコンソールでレコードを検索しようとすると、次のレコードComment.find(1480)が返されます。

#<Comment id: 1480, commentable_id: 51, commentable_type: "Recipe", body: "comment content", user_id: 0, parent_id: nil, lft: nil, rgt: nil, created_at: "2006-05-16 18:48:03", updated_at: "2015-07-25 16:17:17", status: "approved", deleted_at: nil, commentable_username: "user1">

そして、コンソールで破棄しようとしました:

Comment.find(1480).destroy(force: true)

同じエラーが返されます。

コメント ロード (0.3ms) SELECT comments.* FROM comments WHERE comments. deleted_atNULL ANDcommentsです。id= 1480 リミット 1

(0.1ms) BEGIN

SQL (0.3ms) DELETE FROM commentsWHERE comments. id= 1480

コメント ロード (0.2ms) SELECT comments.* FROM comments WHERE comments. id= 1480 リミット 1

(12.5ms) ロールバック

ActiveRecord::RecordNotFound: /Users/yoonwaiyan/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.0/lib から 'id'=1480 のコメントが見つかりませんでした/active_record/relation/finder_methods.rb:320:`raise_record_not_found_exception!' で

このエラーは奇妙で、gem と Stack Overflow の両方で適切な解決策を見つけることができませんでした。どんな助けでも大歓迎です。

4

0 に答える 0