ruby-on-rails - validations - rails validates greater_than
Los rieles forman un puente condicional de validaciĆ³n (4)
Tengo un modelo de rieles que valida la unicidad de 2 valores de formulario. Si estos 2 valores no son únicos, los errores de validación se muestran y el botón "enviar" se cambia a "reenviar". Quiero permitir que un usuario haga clic en el botón "reenviar" y omita la validación del modelo. Quiero hacer algo como esto en 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 el valor "Reenviar".
¿Alguna idea sobre cómo hacer esto?
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
entonces, en su opinión, 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.
No es positivo al respecto, pero podría intentar agregar un attr_accessor a su modelo para mantener si el formulario se envió antes o no.
solo agrega
attr_accessor :submitted
a su modelo y verifíquelo en sus validaciones.
Simplemente 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
Prueba esto:
Rails 2: Model.save(false)
Rails 3: Model.save(:validate => false)
Omite las validaciones (aunque todas ellas).