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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top