Los carriles forman validación condicional bypass
-
05-07-2019 - |
Pregunta
Tengo un modelo de rieles que valida la unicidad de 2 valores de formulario. Si estos 2 valores no son únicos, se muestran los errores de validación y & Quot; submit & Quot; el botón se cambia a " reenviar " ;. Quiero permitir que un usuario haga clic en & Quot; volver a enviar & Quot; botón y omita la validación del modelo. Quiero hacer algo como esto desde la documentación de validación de rieles:
validates_uniqueness_of :value, :unless => Proc.new { |user| user.signup_step <= 2 }
pero no tengo un valor en mi modelo que pueda verificar ... solo los parámetros que tienen " Reenviar " valor.
¿Alguna idea sobre cómo hacer esto?
Solución
En mi opinión, esta es la mejor manera de hacerlo:
class FooBar < ActiveRecord::Base
validates_uniqueness_of :foo, :bar, :unless => :force_submit
attr_accessor :force_submit
end
luego, en su vista, asegúrese de nombrar la etiqueta de envío como
<%= submit_tag 'Resubmit', :name => 'foo_bar[force_submit]' %>
de esta manera, toda la lógica está en el modelo, el código del controlador permanecerá igual.
Otros consejos
Prueba esto:
Rieles 2: Model.save(false)
Rieles 3: Model.save(:validate => false)
Omite las validaciones (aunque todas ellas).
No es positivo sobre esto, pero podría intentar agregar un attr_accessor a su modelo para contener si el formulario se ha enviado o no una vez antes.
solo agrega
attr_accessor :submitted
a su modelo y verifíquelo en sus validaciones.
Puede mirar el botón de enviar para determinar si desea realizar las validaciones.
def form_method
case params[:submit]
when "Submit"
'Do your validation here'
when "Resubmit"
'Do not call validation routine'
end
end