básicamente tengo un modelo de usuario que tiene un campo de cantidad y dinero. Cuando creo el usuario por primera vez, valido ese user.amount <= user.money
. Sin embargo, el usuario puede cambiar la cantidad a través de 'editar'. En la acción de actualización, cuando el usuario cambia la cantidad, calculo la diferencia entre la vieja y la nueva (edad menos nuevo) asciende a través derails validación personalizada después de editar el valor de un campo
amount_change = user.amount - params[:user][:amount].to_f
No sé si esto es la buena forma pero funciona para mí . Básicamente, no estoy almacenando la diferencia y calculando solo cuando el usuario está tratando de cambiar la cantidad. De todos modos, cuando el usuario edita, me gustaría validar que amount_change <= user.money
en su lugar. ¿Cómo puedo hacer esto? Siento que debería pasar algo a la validación, pero no sé cómo puedo pasar en amount_change
ya que se calcula en el medio del método de actualización de mi controlador de usuario. ¡Muchas gracias!
esto parece tipo de trabajo - hay un error en el primer intento si no pasa la validación, pero si el usuario simplemente hace clic en enviar de nuevo, no hay ningún error ... ¿esto se debe a que se estableció un nuevo amount_was y amount? ¡Gracias! (¿También está _changed built in?) – butterywombat
Puedes intentar eliminar ': on =>: update' y ver si eso funciona mejor para ti. '_changed' está integrado en ActiveModel y ActiveRecord. – bowsersenior
hmm Por alguna razón, no puedo hacer que el _change funcione,/obtengo un NoMethodError. ¿Importa que mi variable de cantidad real se llame 'start_amount'? Hice 'start_amount_changed?'. ¡Gracias! – butterywombat