1.5: Validaciones - wyeworks/rails-workshop-2017-dia-1 GitHub Wiki

Validaciones

El objetivo de esta parte es definir algunas reglas que tienen que cumplir los boards que se agreguen en nuestra aplicación. Veremos como Rails nos permite fácilmente declarar las mismas.

1. Agregamos validaciones en el modelo Board

Agregamos validaciones en el modelo Board, las cuales van a generar un error cada vez que se intente guardar un board que no cumpla esas condiciones:

# app/models/board.rb

class Board < ApplicationRecord
  validates :name, presence: true
  validates :visibility, inclusion: { in: %w(public private) }
end

Probamos ejecutar esas validaciones usando la consola de Rails. Debemos correr el comando:

$ rails console

Loading development environment (Rails 5.0.0.1)
irb(main):001:0>

Esto nos abre una sesión interactiva donde podemos ejecutar código Ruby con todo el código de la app precargado.

En la consola, probamos crear una nueva instancia de Board sin datos y comprobamos que las validaciones nos devuelven una lista de errores

$ rails console

irb(main):001:0> board = Board.new
=> #<Board id: nil, name: nil, visibility: nil, favorite: nil, created_at: nil, updated_at: nil>
irb(main):002:0> board.valid?
=> false
irb(main):003:0> board.errors.full_messages
=> ["Name can't be blank", "Visibility is not included in the list"]

Para salir de la consola de rails se usa el comando exit.

2. Corregimos fallas en los tests

Probemos en este punto ver si los tests pasan. Vamos a comprobar que tenemos errores que son causados por las validaciones que introdujimos.

$ rails test

...F

Failure:
BoardsControllerTest#test_should_update_board [/home/vagrant/workshop/trello-app/test/controllers/boards_controller_test.rb:38]:
Expected response to be a <3XX: redirect>, but was a <200: OK>


bin/rails test test/controllers/boards_controller_test.rb:36

.F

Failure:
BoardsControllerTest#test_should_create_board [/home/vagrant/workshop/trello-app/test/controllers/boards_controller_test.rb:19]:
"Board.count" didn't change by 1.
Expected: 3
  Actual: 2

Actualizamos los fixtures que nos generó el scaffold de Rails para que tengan datos válidos y no fallen los tests por las validaciones que agregamos.

# test/fixtures/boards.yml

one:
  name: MyString
  visibility: private
  favorite: false
 
two:
  name: MyString
  visibility: public
  favorite: false

Corremos los tests y comprobamos que pasan todos.

$ rails test
Run options: --seed 39953

# Running:
.......
Finished in 5.172506s, 1.3533 runs/s, 1.7400 assertions/s.

7 runs, 9 assertions, 0 failures, 0 errors, 0 skips

Commit en Git

git add -A
git commit -m "Validaciones"

Siguiente: 1.6. Mejoras al formulario de boards

⚠️ **GitHub.com Fallback** ⚠️