> For the complete documentation index, see [llms.txt](https://certil-remy.gitbook.io/learn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://certil-remy.gitbook.io/learn/rails/untitled-31.md).

# Validations with form\_tag

## Validations with `form_tag`

## Objectives

* Render or redirect based on validation of instance in create/update
* Prefill in form values based on an instance
* Print out full error messages based on an invalid instance
* Introspect on errors for a field
* Apply an error class to a field conditionally based on errors on a field

## Requirements

### Validations

1. Add validations to `Author` such that...
2. `name` is not blank
3. `email` is unique
4. `phone_number` is exactly 10 digits long
5. Add validations to `Post` such that...
6. `title` is not blank
7. `content` is at least 100 characters long
8. `category` is either `"Fiction"` or `"Non-Fiction"`

### Basic Routes & Controllers

1. Create controllers for both models.
2. Create `show`, `new`, `edit`, `create`, and `update` routes for both models.
3. Define controller actions for `show`, `new`, and `edit`.
4. Define the "valid path" for the `create` and `update` controller actions.
5. Define the "invalid path" for the `create` and `update` controller actions.

### Forms

1. Create forms with `form_tag` for both models' `new` and `edit` actions.
2. Prefill already-submitted forms with the invalid data when re-rendering.
3. Display a list of errors at the top of forms when an invalid action is attempted. They should be contained in an element with id `error_explanation`, and each error should have its own `<li>`.
4. Conditionally wrap each field in a `.field_with_errors` div if it has errors.

Clone : <https://github.com/learn-co-curriculum/validations-with-form_tag-rails-lab>
