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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top