1

ユーザーの favourite_guidelines の配列があります。私のコンソールでは、次のようになります。

fg=User.first.favourite_guidelines
  User Load (73.9ms)  SELECT "users".* FROM "users" LIMIT 1
  FavouriteGuideline Load (0.2ms)  SELECT "favourite_guidelines".* FROM "favourite_guidelines" WHERE "favourite_guidelines"."user_id" = 11
 => [#<FavouriteGuideline id: 16, guideline_id: 24, user_id: 11, created_at: "2013-02-17 01:03:19", updated_at: "2013-02-17 01:03:19">, #<FavouriteGuideline id: 18, guideline_id: 23, user_id: 11, created_at: "2013-02-17 11:40:27", updated_at: "2013-02-17 11:40:27">] 

そのため、2 つのガイドラインが含まれています。ユーザーのお気に入りのガイドラインでそのお気に入りが削除されるように、特定の guideline_id の値を削除できるようにしたいと考えています。現時点で私は持っています:

User.first,favourite_guidelines.delete_if{|favourite| favourite["guideline_id"] == 24}

それは私に与えます:

.9.3p194 :066 > User.first.favourite_guidelines.delete_if{|favourite| favourite["guideline_id"] == 24}
  User Load (0.4ms)  SELECT "users".* FROM "users" LIMIT 1
  FavouriteGuideline Load (0.3ms)  SELECT "favourite_guidelines".* FROM "favourite_guidelines" WHERE "favourite_guidelines"."user_id" = 11
 => [#<FavouriteGuideline id: 18, guideline_id: 23, user_id: 11, created_at: "2013-02-17 11:40:27", updated_at: "2013-02-17 11:40:27">]'

したがって、削除しているように見えますが、明らかに保存されていません。

    1.9.3p194 :067 > User.first.favourite_guidelines
  User Load (0.4ms)  SELECT "users".* FROM "users" LIMIT 1
  FavouriteGuideline Load (0.4ms)  SELECT "favourite_guidelines".* FROM "favourite_guidelines" WHERE "favourite_guidelines"."user_id" = 11
 => [#<FavouriteGuideline id: 16, guideline_id: 24, user_id: 11, created_at: "2013-02-17 01:03:19", updated_at: "2013-02-17 01:03:19">, #<FavouriteGuideline id: 18, guideline_id: 23, user_id: 11, created_at: "2013-02-17 11:40:27", updated_at: "2013-02-17 11:40:27">]

私は何を間違っていますか?

4

2 に答える 2

1

これを試して:

   User.first.favourite_guidelines.destroy( :guideline_id => 24)

または

  User.first.favourite_guidelines.where( :guideline_id => 24).destroy_all
于 2013-02-17T12:02:15.953 に答える
1

delete_if返されたレコードの配列では機能しますが、データベースでは機能しません。試す:

User.first.favourite_guidelines.where(guideline_id: 24).destroy_all

PS。また、ここを見ることができます

于 2013-02-17T11:54:24.707 に答える