2013-02-17 1 views
1

J'ai un tableau de favourite_guidelines d'un utilisateur. Dans ma console, il ressemble à ceci:Essayer de supprimer de array - rails

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">] 

Donc, il contient deux lignes directrices. Je voudrais être en mesure de supprimer une valeur d'un certain guideline_id afin que les lignes directrices préférées de l'utilisateur aient supprimé ce favori. En ce moment j'ai:

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

Cela me donne:

.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">]' 

Il semble donc que c'est deleteing, mais il est évidemment pas sauver car alors si je fais:

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">] 

Qu'est-ce que je fais mal?

+0

vous supprimez de tableau pas de table .. – codeit

Répondre

1

Essayez ceci:

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

Ou

User.first.favourite_guidelines.where(:guideline_id => 24).destroy_all 
1

delete_if Fonctionne sur le tableau des enregistrements renvoyés mais pas sur la base de données. Essayez:

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

PS. Aussi, vous pouvez regarder here

+0

oui - c'est tout! Existe-t-il un moyen de transmettre autre chose que l'identifiant (c'est-à-dire que je veux passer le guideline_id mais cela prend le favourite_guideline_id) – tessad

+0

Oui. Voir le lien ajouté. Vous pouvez 'destroy_all (some_field: some_value)' – 907th

+0

Oui !!! Je t'aime. Je vous remercie. User.first.favourite_guidelines.where (: directive_id => 24) .destroy_all – tessad