Veréis, tengo un sistema de ofertas en mi aplicación de tal modo que un
Club puede hacer una Offer a un Player de otro Club, el problema viene
en que necesito validar que un mismo Player no hace 2 veces la misma
oferta a un mismo jugador de un mismo equipo. Mi modelo oferta está tal
que asÃ:
== Schema Information
Schema version: 20090608143112
Table name: offers
id :integer not null, primary key
club_id :integer not null
player_id :integer not null
buyer_id :integer not null
state :integer default(0)
created_at :datetime
updated_at :datetime
pay :decimal(16, 2) default(0.0)
class Offer < ActiveRecord::Base
PENDING = 0
ACCEPTED = 1
REJECTED = 2
TRANSFERED = 3
validates_uniqueness_of :buyer_id, :scope => :player_id #aquà veo el
problema
belongs_to :club
belongs_to :buyer, :class_name => ‘Club’
belongs_to :player
end
El problema está en que esa restricción sólo deberÃa funcionar siempre y
cuando state = PENDING ¿Cómo puedo hacer esto con validate?
Puedes condicionar la ejecución de la validación usando :if y :unless.
En tu caso, para que sólo se ejecute si el estado es PENDING vendría a
ser algo de este estilo:
validates_uniqueness_of :buyer_id, :scope => :player_id, :if
=> :pending?
def pending?
state == PENDING
end
De todas formas de esa forma no podrías crear una oferta pendiente si
ya existe alguna del mismo buyer al mismo player sea cual sea su estado.
Sin saber si te puede afectar por otro lado, para asegurar que solo
existe una oferta pendiente entre ellos creo que serviría esto:
validates_uniqueness_of :state, :scope => [:buyer_id, :player_id], :if
=> :pending?
Saludos
Andrés Cirugeda E.
ASPgems
Email: andres at aspgems dot com
‘All we have to decide is what to do with the time that is given to us’.
–Gandalf.
El 10/06/2009, a las 20:43, Carlos
Belizón escribió:
Veréis, tengo un sistema de ofertas en mi aplicación de tal modo que
Andrés Cirugeda E. wrote:
Puedes condicionar la ejecuci�n de la validaci�n usando :if y :unless.
Andr�s Cirugeda E.
ASPgems
Email: andres at aspgems dot com
‘All we have to decide is what to do with the time that is given to us’.
–Gandalf.
El 10/06/2009, a las 20:43, Carlos
Beliz�n escribi�:
Ver�is, tengo un sistema de ofertas en mi aplicaci�n de tal modo que
De esta forma funciona de perlas, incluso con transferencias circulares.
Aún asà muchas gracias Borja MartÃn, he aprendido algo nuevo gracias a
su enlace.