No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Agregando validaciones al modelo

22/36
Recursos

Aportes 9

Preguntas 4

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

A mi me funcion贸

uniqueness: { case_sensitive: false }

Para quien le interese saber m谩s del tema de validaciones, les dejo este excelente art铆culo de las gu铆as oficiales de Ruby on Rails.
Y si necesitan documentos de referencia, les dejo el siguiente link:
https://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

En la versi贸n 7 de Rails, al crear el scaffold no funciona el bot贸n Destroy, creo que es por la implementaci贸n de turbo-rails, as铆 que para hacer que funcione el bot贸n Destroy debemos de cambiar el c贸digo de los botones, de esto:

%td= link_to 'Destroy', category, method => :delete, :data => { :confirm => 'Are you sure?' }

a esto:

%td= link_to 'Destroy', category, :data => { turbo_method: :delete, :confirm => 'Are you sure?' }

y lo mismo con el bot贸n Destroy de Tasks

Para evitar la creaci贸n de registros en blanco, o para agregar validaciones que se requieran para cumplir las reglas del negocio se pueden agregar validaciones a los campos para que lancen un error s铆 estas no se cumplen.

Validaciones

Las validaciones se agregan en el model que ser谩 validado, empezando con la palabra validates seguido de los atributos que se quiere validar. Seguido de esto se pueden usar helpers que Rails provee para validar diferentes cosas. Por ejemplo, el helper presence para validar que el campo no est茅 vac铆o.

class Category < ApplicationRecord
    has_many :tasks

    validates :name, :description, presence: true
    validates :name, uniqueness: { case_insensitive: false }
end

Existen otros helpers para validar diferentes aspectos y diferentes elementos HTML. Documentaci贸n: https://guides.rubyonrails.org/active_record_validations.html#validation-helpers

Validaci贸n personalizada

Para validar un atributo de forma personalizada se usa la palabra validate, seguido del nombre de la funci贸n que validar谩 el campo. La funci贸n debe ser declarada dentro de la clase.

validate :due_date_validity

def due_date_validity   
  return if due_date.blank?
  return if due_date > Date.today
  errors.add(:due_date, I18n.t('task.errors.invalid_due_date'))
end

En este caso se valida que la fecha de vencimiento no est茅 vac铆a y adem谩s que la fecha no sea anterior al d铆a actual, si no se cumplen las validaciones se agrega un error con el m茅todo errors.add.

En caso de que no quieran utlizar la internalizaci贸n pueden declarar su error asi:

def due_date_validity
    return if due_date.blank?
      return if due_date > Date.today
        errors.add(:due_date, "Date can't be in the past")
  end

Cu谩l es la diferencia de colocar uniqueness de la siguiente manera鈥

:uniqueness => true

@JohanTique

Excelente, estoy muy contento con este curso, muy buenas explicaciones.

Para quienes no les funcione al hacer click en destroy (redirecciona al registro), pueden intentar lo siquiente:

Dentro de la vista de category, en index:

%td= link_to 'Destroy', category, :data => { :turbo_method => :delete, :turbo_confirm => 'Are you sure?' }

Y aplicando la siguiente configuraci贸n en el archivo application.html.erb dentro de la etiqueta **head **

RUTA: /app/views/layouts/application.html.erb

<%= javascript_include_tag "turbo", type: "module" %>

Excelente la explicaci贸n me queda muy clar贸 c贸mo realizar validaciones, estoy tratando de implementarlas en una api y rescatarlas para presentarlas en un front ssr.