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
Embelleciendo nuestra aplicación
Cierre
Desplegando a Heroku
Conclusiones del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Johan Tique
Aportes 10
Preguntas 5
A mi me funcionó
uniqueness: { case_sensitive: false }
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 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
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" %>
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.
En el punto de case_insensitive la validación se cumple, pero esto sucede porque no borro el registro que tenÃa por nombre Test, por lo tanto cuando hace la validación lo hace entre Test y Test, y no entre test y Test.
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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?