2016-05-25 5 views
0

Ich habe ein 'Notizen' Objekt verschachtelt in mehreren anderen Objekten, zum Beispiel 'Benutzer'. Ich möchte nur eine neue Notiz hinzufügen/speichern, wenn jemand etwas im Feld note_text ausgefüllt hat. Ich dachte, ich finde einen Weg, aber es stoppt wegen des Fehlers das Speichern des Restes des Objekts.Wie verhindern Sie das Speichern eines verschachtelten Objekts, aber speichern Sie das Hauptobjekt weiterhin?

Ich hatte gehofft, einfach die Speicherung der Notizen zu stoppen und den Benutzer aktualisiert und gespeichert werden.

Antwort

3

Verwenden :reject_if zu leise jeden Datensatz löschen, die nicht Ihre Logik nicht passiert:

class User < ActiveRecord::Base 
    has_many :notes 
    accepts_nested_attributes_for :notes, reject_if: proc { |attributes| attributes['note_text'].blank? } 
end 
1

Sie können jederzeit eine Validierung hinzufügen, die von leeren Notizen ausschließt gespeichert werden:

class Note < ActiveRecord::Base 
    validates :note_text, presence: true 
end 

Dies wird ein Trigger Ausnahme beim Speichern, wenn Sie save! verwenden, damit Sie eventuell ungültige Notizen aussortieren können:

before_save :remove_empty_notes 

def remove_empty_notes 
    self.notes.reject! { |note| !note.valid? } 
end 
Verwandte Themen