2011-02-10 20 views
10

devoaccepts_nested_attributes_for ignorare valori vuoti

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 

Ho una forma dinamica in cui si preme '+' per aggiungere nuovi textarea per la creazione di nuovi preferiti. Quello che voglio fare è ignorare quelli vuoti, trovo questo più difficile da ordinare nel controller di aggiornamento di un attributo non annidato.

Quello che ho temporaneamente è un hack nel callback after_save che elimina i record vuoti. Qual è il modo più semplice per ignorare questi oggetti vuoti?

Non desidero convalida ed errori, solo una cancellazione/ignorazione silenziosa.

risposta

23

C'è una convalida incorporato:

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

Grande punta apneadiving, grazie! Con questo ho trovato questo (per chiunque altro leggendo) "Puoi anche impostare a: reject_if proc per ignorare silenziosamente qualsiasi nuovo record hash se non riescono a passare i tuoi criteri. Ad esempio, l'esempio precedente potrebbe essere riscritto come:" - http: //api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html – Mike

+0

siete i benvenuti :) – apneadiving

+0

Rails 5 ha 'reject_if:: all_blank'. Non so se questo è stato introdotto di recente in Rails 5 o se funziona anche nelle vecchie versioni di framework. – danielricecodes

Problemi correlati