app/views/users/_form.html.erb
<%= form_for(@user) do |f| %>
<% if @user.errors.any? %>
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading"><%= form_errors_heading(@user) %></h4>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-group">
<%= f.label :fullname %>
<%= f.text_field :fullname, autocomplete: 'name', maxlength: User::FULLNAME_LENGTH_MAX, class: "form-control #{'is-invalid' if @user.errors[:description].any?}" %>
</div>
<div class="form-group">
<%= f.label :avatar %>
<div class="custom-file">
<%= f.file_field :avatar, class: 'custom-file-input', accept: 'image/jpeg' %>
<label class="custom-file-label" for="user_avatar">Choose file...</label>
</div>
</div>
<div class="form-group">
<%= f.label :description %>
<%= f.text_area :description, placeholder: 'Add a description to your profile', rows: 3, maxlength: User::DESCRIPTION_LENGTH_MAX, class: "form-control #{'is-invalid' if @user.errors[:description].any?}" %>
</div>
<%= f.submit class: 'btn btn-primary' %>
<% end %>