2012-06-18 6 views
5

sé que se puede tener:¿Puede reject_if usarse para rechazar un recurso anidado si todos los campos excepto uno están en blanco?

accepts_nested_attributes_for :foo, :reject_if => proc { |a| a[:bar].blank? } 

¿Hay una manera de decir en su lugar algo así como

accepts_nested_attributes_for :foo, :reject_if => blah[:bar].blank? and flah[:bar].blank? 

o

accepts_nested_attributes_for :foo, :reject_if => all fields except record_date.blank? 

Gracias

+0

La misma pregunta. Listar todos los campos en blanco en un proceso no es muy SECO ... Tengo un formulario anidado con un cuadro de selección con valor predeterminado (no puede estar en blanco). Quiero ignorar ese valor, pero no he visto algo limpio ... –

Respuesta

0

Inspirado por esto: https://rails.lighthouseapp.com/projects/8994/tickets/2501-any_blank-and-all_blank-options-for-accepts_nested_attributes_for-reject_if

Esto funcionó bien para mí:

reject_if: proc { |attributes| attributes.all? {|k,v| v.blank? || ['foo', 'bar', 'baz'].include?(k)} } 

Puede reemplazar ['foo', 'bar', 'baz'].include?(k) por k == 'foo' si sólo hay una excepción, sino la primera sintaxis hace que el proc listo para múltiples.

+0

Probado esto en Rails 5, no está funcionando. –

9

estoy un poco tarde en esto, pero se puede hacer:

accepts_nested_attributes_for :foo, 
           reject_if: ->(attributes){ 
           attributes.except(:key).values.all?(&:blank?) 
           } 
+0

Esta debería ser la respuesta aceptada, es limpia y efectiva. –

+1

gracias! Otra nota tardía: cuidado con las teclas de cadena cuando se usa 'except'. Puede usar 'attributes.with_indifferent_access' para evitar estos casos. –

Cuestiones relacionadas