El uso de Rieles forma ayudantes en métodos inexistentes
-
21-09-2019 - |
Pregunta
Normalmente, al utilizar de forma ayudantes en rieles, cada campo se correlaciona directamente con un método en el objeto apropiado.
Sin embargo, tengo una forma (de registro de usuario) que debe incluir campos que no son parte del propio modelo de usuario (por ejemplo, datos de la tarjeta), pero es necesario que aparezca.
¿Cómo puedo construir el formulario para que puedo conseguir los campos necesarios, así como validaciones, mientras que necesito (de forma que encaje con todas mis otras validaciones) sin sucia-ing mi modelo de usuario?
Solución
No estoy seguro de lo que entendemos por "sucio-ing" su modelo de usuario, pero se puede hacer esto mediante el método attr_accessor . Esto le permitirá crear un atributo para el modelo que se puede utilizar para las validaciones:
class Widget < ActiveRecord::Base
attr_accessor :confirmation_email
validates_length_of :confirmation_email, :within => 1..10
end
Para ejecutar la validación solamente en ciertos momentos, se puede usar una condición :if
:
validates_length_of :confirmation_email, :within => 1..10, :if => Proc.new { |widget| widget.creation_step > 2 }
También puede utilizar un método de clase, como: :if => :payment_complete
. Con estos se debe ser capaz de lograr la funcionalidad que desea. Por lo que yo sé que no hay ninguna manera más concisa.
Otros consejos
Yehuda Katz tiene un gran explicación de cómo se puede utilizar para hacer ActiveModel
una clase arbitraria forma compatible con ayudantes Rails. Eso sólo funciona si está en los carriles 3, sin embargo.
Si usted no está viviendo en el borde de la sangría, ver Railscasts episodio 193, "Modelo sin tablas ", que describe cómo se puede crear una clase que grazna suficiente como ActiveRecord::Base
que trabaja con form_for
.