2011-02-10 14 views
10

mamaccepts_nested_attributes_for zignorować puste wartości

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 

Mam dynamiczną formę gdzie naciśnięcie „+”, aby dodać nowe pola tekstowe do tworzenia nowych faworytów. Co chcę zrobić, to zignorować puste, uważam, że trudniej jest sortować w kontrolerze aktualizacji niż atrybut niezagnieżdżony.

Tym, co mam tymczasowo, jest włamanie w wywołaniu zwrotnym after_save, usunięcie pustych rekordów. Jaka jest najbardziej railsowa metoda ignorowania tych pustych obiektów?

Nie chcę sprawdzania poprawności i błędów, po cichu usuwam/ignoruję.

Odpowiedz

23

Jest wbudowany w walidacji:

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

Świetna końcówka apneadiving, dzięki! Znalazłem to (dla każdego, kto czyta) "Możesz także ustawić procę: reject_if, aby po cichu zignorować wszelkie nowe skróty rekordów, jeśli nie spełnią twoich kryteriów. Na przykład, poprzedni przykład mógł zostać przepisany jako:" - http: //api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html – Mike

+0

Nie ma sprawy :) – apneadiving

+0

Rails 5 ma wartość 'reject_if:: all_blank'. Nie wiem, czy to było niedawno wprowadzone w Railsach 5, czy też działa w starszych wersjach szkieletowych. – danielricecodes

Powiązane problemy