2013-01-03 1 views
5

Diciamo che ho un modello utente con molti articoli.Rails - Eliminazione di record associati non salvati

Se chiamo user.articles.new molte volte avrò molti oggetti articolo non salvati associati all'utente. Sono visibili quando si esegue user.articles. Chiamando user.save salverà tutti questi record non salvati.

Come posso cancellare i record non salvati? Ho intenzione di chiamare user.save ma non voglio che quei record non salvati siano lì

+2

Perché stai chiamando 'user.articles.new' molte volte se non si desidera creare nuovi record articolo? – regulatethis

risposta

2

Un'opzione sarebbe user.articles.delete_if{|a| a.new_record?}, ma suona come una soluzione per il problema reale, a cui @regulatethis fa riferimento nel commento della tua domanda.

+1

Questo in realtà non distrugge il record. Provato usando la console. Se non c'è un modo semplice per farlo, probabilmente dovrei semplicemente risolvere il problema di root –

3

Io uso la seguente soluzione before_validation :remove_blank_articles!:

class User 
    has_many :articles 

    validates_associated :articles 

    before_validation :remove_blank_articles! 

    private 
    def remove_blank_articles! 
     self.articles = articles - articles.select(&:blank?) 
     true 
    end 
end 

class Article 
    belongs_to :user 

    validates_presence_of :title, :body 

    def blank? 
    title.blank? and body.blank? 
    end 
end 
+0

Questa è la risposta corretta per Rails 4. –