2011-02-10 4 views
10

i ontaccepts_nested_attributes_for ignorer des valeurs vides

class Profile 
    has_many :favorite_books, :dependent => :destroy 
    has_many :favorite_quotes, :dependent => :destroy 

    accepts_nested_attributes_for :favorite_books, :allow_destroy => true 
    accepts_nested_attributes_for :favorite_quotes, :allow_destroy => true 
end 

J'ai une forme dynamique où vous appuyez sur « + » pour ajouter de nouvelles zones de texte pour la création de nouveaux favoris. Ce que je veux faire est ignorer les blancs, je trouve cela plus difficile à trier dans le contrôleur de mise à jour qu'un attribut non imbriqué. Ce que j'ai temporairement est un hack dans le rappel after_save supprimant les enregistrements vides. Quel est le moyen le plus simple pour ignorer ces objets vierges?

Je ne veux pas de validation et d'erreurs, juste une suppression/ignorer silencieuse.

Répondre

23

Il y a une validation intégrée:

:reject_if => lambda { |c| c[:name].blank? }, 
+0

Grande apneadiving de pointe, merci! Avec cela j'ai trouvé ceci (pour n'importe qui d'autre) "Vous pouvez également placer un: reject_if proc pour ignorer silencieusement n'importe quel nouveau hachage d'enregistrement s'ils échouent à passer vos critères, par exemple, l'exemple précédent pourrait être réécrit comme: //api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html – Mike

+0

vous êtes les bienvenus :) – apneadiving

+0

Rails 5 a 'reject_if:: all_blank'. Je ne sais pas si cela a été introduit récemment dans Rails 5 ou si cela fonctionne aussi dans les anciennes versions de framework. – danielricecodes