¿Cómo puedo verificar si la validación es verdadera y usarla en una condición en el controlador?

Modelo

validate :no_reservation_overlap

scope :overlapping, ->(period_start, period_end) do
  where "((date_start <= ?) and (date_end >= ?))", period_end, period_start
end

private

def no_reservation_overlap
  if (Reservation.overlapping(date_start, date_end).any?)
     errors.add(:date_end, 'it overlaps another reservation')
  end
end

Enlace para obtener más información: Intervalo de fechas superpuesto por rieles de usuario

Quiero poder verificar si la validación es verdadera y pasarla al controlador

Controlador

   if validation == true 
      #do something
   end 

Intenté usar on: create para evitar que ejecute una acción create.

1
user8755767 14 nov. 2017 a las 18:16

2 respuestas

La mejor respuesta

Simplemente llame a valid? en un objeto ActiveRecord. Por ejemplo:

@reservation = Reservation.new(reservation_params)

if @reservation.valid?
  # Do something if any validation fails
  if @reservation.errors[:date_end].include? 'it overlaps another reservation' 
    # Do something if the overlapping validation fails
  end
end

Puede leer más sobre validaciones en la Guía de Ruby on Rails

Si desea verificar un error de validación específico, puede consultar este desbordamiento de pila pregunta.

4
Tom Aranda 14 nov. 2017 a las 16:14

if @user.valid? do something end

1
WilliamRWilson 14 nov. 2017 a las 15:19