accept_nested_attributes_for игнорировать пустые значения

у меня есть

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

У меня есть динамическая форма, в которой вы нажимаете «+», чтобы добавить новые текстовые поля для создания нового избранного. Что я хочу сделать, так это игнорировать пустые, мне это труднее отсортировать в контроллере обновлений, чем не вложенный атрибут.

То, что у меня есть временно, - это взлом в обратном вызове after_save, удаляющий пустые записи. Как лучше всего игнорировать эти пустые объекты?

Мне не нужны проверки и ошибки, просто молчаливое удаление / игнорирование.


person Michael    schedule 10.02.2011    source источник


Ответы (1)


Есть встроенная валидация:

:reject_if => lambda { |c| c[:name].blank? },
person apneadiving    schedule 10.02.2011
comment
Отличный совет по апноэ, спасибо! С этим я нашел это (для всех, кто читает). Вы также можете установить: reject_if proc, чтобы молча игнорировать любые новые хэши записей, если они не соответствуют вашим критериям. Например, предыдущий пример можно переписать как: - api.rubyonrails.org/ классы / ActiveRecord / NestedAttributes / - person Michael; 11.02.2011
comment
В Rails 5 есть reject_if: :all_blank. Я не знаю, было ли это недавно введено в Rails 5 или работает и в более старых версиях фреймворка. - person danielricecodes; 22.03.2017
comment
Что, если я не хочу reject? Я хочу _2 _ / _ 3_ Профиль, но без favorite_quotes или favorite_books. Это не позволяет. - person joseglego; 15.01.2018