2013-01-03 2 views
5

Sagen wir, ich habe ein Benutzermodell mit vielen Artikeln.Rails - Löschen nicht gespeicherter verknüpfter Datensätze

Wenn ich user.articles.new viele Male aufrufen werde ich viele ungesicherte Artikel Objekte mit dem Benutzer verbunden haben. Sie sind sichtbar, wenn Sie user.articles ausführen. Durch den Aufruf von user.save werden alle nicht gespeicherten Datensätze gespeichert.

Wie kann ich nicht gespeicherte Datensätze löschen? Ich plane den Aufruf von user.save, aber ich möchte nicht, dass diese ungespeicherten Datensätze dort sein

+2

Warum Sie anrufen 'user.articles.new' viele Male, wenn Sie nicht wollen, neue Artikel Datensätze erstellen? – regulatethis

Antwort

2

Eine Option wäre user.articles.delete_if{|a| a.new_record?}, aber das klingt wie ein Workaround für das eigentliche Problem, auf die @regulatethis Punkte in Ihrer Frage Kommentar.

+1

Das zerstört den Rekord nicht wirklich. Ich habe es mit der Konsole versucht. Wenn es keinen einfachen Weg gibt, es zu tun, sollte ich wahrscheinlich nur das Grundproblem beheben –

3

Ich verwende die folgende Abhilfe 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

Dies ist die richtige Antwort für Rails 4. –