Validaciones en el Modelo (:scope)

Que tal gente.

Tengo la siguiente duda, estoy haciendo algunas validaciones para
registrar unos datos. El problema es que estoy realizando las
validaciones en el controlador y no en el modelo

Le explico, tengo algo como esto. @Item = Items.find_by_sql(“select id
from XX where fecha between ‘#{fecha1}’ AND ‘#{fecha2}’ AND
fecha_culminado is null …”

Luego

If @Item
“ERROR”
else
XXXX.save
END
.
.
.
.

Ahora, quiero poder hacer estas validaciones en el modelo. Por ejemplo
algo asi

validates_uniqueness_of :items_id, :scope => [:fecha_culminado==nil,
:fecha between fecha1, fecha2] y asi sucesivamente.

Gracias/

Saludos

2008/3/31 Jhon K. [email protected]:

Ahora, quiero poder hacer estas validaciones en el modelo. Por ejemplo
algo asi

validates_uniqueness_of :items_id, :scope => [:fecha_culminado==nil,
:fecha between fecha1, fecha2] y asi sucesivamente.

En tu modelo puedes implementar el método validate, algo
así:
def validate
errors.add_to_base “Fecha Inválida” if fecha1 < fecha2
end

Si lo que quieres es que sea explicitamente el between de SQL entonces
no se si esta validación te pueda servir. Además de esto te puedes
ayudar de las otras validaciones (como el validates_uniqueness_of que
mencionas) y todo esto será ejecutado al ser llamado Modelo.valid?

Responde esto tu pregunta?

Pero lo llamarias asi?

validates_uniqueness_of :items_id, :message => “Ya existe el Equipo”,
:if => :validate?

private
def validate?
errors.add_to_base “Fecha Inv�lida” if fecha < fecha AND fecha2 is
not null
end

Tengo dudas es en las fechas, por que como diferencia el modelo que
quiero que la fecha para ese item tiene que ser mayor a una fecha
registrada para el mismo items_id.

No se si me explico, quiero validar que para el mismo items_id, la fecha
registrada sea mayor a la ultima fecha, y una fecha_cierre(fecha2) no
sea null.

Por eso lo hago con el Sql, por que no lo se hacer con el modelo

2008/3/31 Jhon K. [email protected]:

Pero lo llamarias asi?

validates_uniqueness_of :items_id, :message => “Ya existe el Equipo”,
:if => :validate?

No es necesario que hagas esa llamada así ya que validate es uno de
los métodos que Rails llamará por defecto cuando se pregunte
Modelo.valid?, o en otras palabras, ejecutará validate además de los
validadores usuales. Por esta razón no hay necesidad de hacerlo un
método privado ni nada por el estilo.