A mi me funcionó
uniqueness: { case_sensitive: false }
Introducción
Todo lo que aprenderás sobre Ruby on Rails
¿Qué es Ruby on Rails y por qué usarlo?
Entorno de desarollo
Entorno de desarrollo de Ruby on Rails
Instalación de Ruby, RoR en Linux
Instalación de Ruby, RoR en Mac y Windows
Nuestra primera aplicación
Entender la web con rieles
Primero pasos con Ruby on Rails
Entender el enrutamiento básico
Manipular el patrón MVC
Los secretos de Rails
Assets y Layouts
Agregar el primer conjunto de scaffolds
Cómo funcionan las migraciones
Optimiza tu código con HAML
Agiliza la construcción de formularios con Simple Form
Soporte de varios idiomas para tu aplicación
Debugging: detecta los errores en tu código
Proyecto del curso: primeros pasos
¿Qué vamos a desarrollar?
Diseñando el modelo de datos
Construye los primeros scaffolds del proyecto
Internacionalizando los modelos
Agregando validaciones al modelo
Proyecto del curso: usuarios
Añadiendo el concepto de usuario
Asignando un propietario a la tarea
Añadiendo participantes a la tarea
Creando formularios anidados
Interactuando con Cocoon para anidar formularios
CanCan: ¿puedes hacerlo?
Proyecto del curso: interacciones
Callbacks en Rails
Añadiendo datos semilla
Enviando e-mails a los participantes
Añandiendo notas a la tarea
Añadiendo notas con AJAX
Cierre
Embelleciendo nuestra aplicación
Desplegando a Heroku
Conclusiones del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 9
Preguntas 4
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.
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
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.
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.