Skip to content

Commit

Permalink
Update registration form validation and error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
natthaphong1939 committed Sep 11, 2024
1 parent b1821b7 commit 27cbc13
Show file tree
Hide file tree
Showing 5 changed files with 163 additions and 82 deletions.
20 changes: 16 additions & 4 deletions app/assets/stylesheets/application.css
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ a {
text-decoration: none;
}

.error-message {
font-size: 14px;
color: red;
}

.column {
display: flex;
flex-direction: column;
Expand All @@ -50,15 +55,15 @@ a {
.form-row {
display: flex;
justify-content: space-between;
margin-bottom: 1rem;
margin-bottom: 10px;
gap: 1rem;
}

.form-group {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.5rem;
height: 80px;
}

.form-group div {
Expand All @@ -72,12 +77,14 @@ a {
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
width: 250px;
}

.form-group select {
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
width: 100%;
}

.form-row a {
Expand Down Expand Up @@ -149,7 +156,8 @@ table {
margin-top: 1.5rem;
}

th, td {
th,
td {
padding: 0.3rem 0.75rem;
text-align: left;
border: 1px solid #ddd;
Expand Down Expand Up @@ -183,7 +191,7 @@ th {
text-align: center;
font-size: 24px;
}

tr {
font-size: 12px;
}
Expand All @@ -195,4 +203,8 @@ th {
.form-row {
flex-direction: column;
}

.form-control {
width: 100%;
}
}
4 changes: 2 additions & 2 deletions app/controllers/registrations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def create
if @registration.save
redirect_to root_path, notice: 'Registration was successfully created.'
else
render :index
render :new, status: :unprocessable_entity
end
end

Expand All @@ -25,7 +25,7 @@ def update
if @registration.update(registration_params)
redirect_to root_path, notice: 'Registration was successfully updated.'
else
render :edit
render :edit, status: :unprocessable_entity
end
end

Expand Down
22 changes: 21 additions & 1 deletion app/models/registration.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,22 @@
class Registration < ApplicationRecord
class Registration < ApplicationRecord
validates :first_name, presence: true
validates :last_name, presence: true
validates :email, presence: true, format: { with: URI::MailTo::EMAIL_REGEXP }
validates :phone_number, presence: true
validates :birthday, presence: true
validates :gender, presence: true
validates :subject, presence: true

validate :check_birthday_age

private

def check_birthday_age
if birthday.present?
if birthday > 18.years.ago.to_date
errors.add(:birthday, "You must be at least 18 years old")
end
end
end

end
105 changes: 65 additions & 40 deletions app/views/registrations/edit.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,78 @@
<h1>Edit Registration</h1>

<%= form_with(model: @registration, url: update_user_path, local: true) do |form| %>
<div class="form">
<div class="form-row">
<div class="form-group">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: 'form-control' %>
</div>
<div class="form">

<div class="form-row">
<div class="form-group">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:first_name).join(', ') %>
</div>
</div>

<div class="form-group">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: 'form-control' %>
</div>
</div>

<div class="form-row">
<div class="form-group">
<%= form.label :birthday %>
<%= form.date_field :birthday, class: 'form-control' %>
</div>
<div class="form-group">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:last_name).join(', ') %>
</div>
</div>
</div>

<div class="form-group">
<%= form.label :gender %>
<div>
<%= form.radio_button :gender, 'Male' %>
<%= form.label :gender_male, 'Male' %>
<%= form.radio_button :gender, 'Female' %>
<%= form.label :gender_female, 'Female' %>
</div>
</div>
</div>
<div class="form-row">
<div class="form-group">
<%= form.label :birthday %>
<%= form.date_field :birthday, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:birthday).join(', ') %>
</div>
</div>

<div class="form-row">
<div class="form-group">
<%= form.label :email %>
<%= form.email_field :email, class: 'form-control' %>
</div>
<div class="form-group">
<%= form.label :gender %>
<div>
<%= form.radio_button :gender, 'Male' %>
<%= form.label :gender_male, 'Male' %>
<%= form.radio_button :gender, 'Female' %>
<%= form.label :gender_female, 'Female' %>
</div>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:gender).join(', ') %>
</div>
</div>
</div>

<div class="form-row">
<div class="form-group">
<%= form.label :email %>
<%= form.email_field :email, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:email).join(', ') %>
</div>
</div>

<div class="form-group">
<%= form.label :phone_number %>
<%= form.text_field :phone_number, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:phone_number).join(', ') %>
</div>
</div>
</div>

<div class="form-group">
<%= form.label :subject %>
<%= form.select :subject, ['Math', 'Science', 'History', 'Art'], include_blank: 'Select', class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:subject).join(', ') %>
</div>
</div>

<div class="form-group">
<%= form.label :phone_number %>
<%= form.telephone_field :phone_number, class: 'form-control' %>
</div>
</div>

<div class="form-group">
<%= form.label :subject %>
<%= form.select :subject, ['Math', 'Science', 'History', 'Art'] %>
</div>
</div>

<div class="spacing-btn">
<%= link_to "Back", root_path, class: 'btn btn-secondary' %>
Expand Down
94 changes: 59 additions & 35 deletions app/views/registrations/new.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,81 @@
<h1>Register Form</h1>

<%= form_with(model: @registration, url: register_path) do |form| %>
<div class="form">
<div class="form-row">
<div class="form-group">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: 'form-control' %>
</div>
<div class="form">

<div class="form-row">
<div class="form-group">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:first_name).join(', ') %>
</div>
</div>

<div class="form-group">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: 'form-control' %>
</div>
</div>

<div class="form-row">
<div class="form-group">
<%= form.label :birthday %>
<%= form.date_field :birthday, class: 'form-control' %>
<div class="form-group">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:last_name).join(', ') %>
</div>
</div>
</div>

<div class="form-group">
<%= form.label :gender %>
<div>
<%= form.radio_button :gender, 'Male' %>
<%= form.label :gender_male, 'Male' %>
<%= form.radio_button :gender, 'Female' %>
<%= form.label :gender_female, 'Female' %>
<div class="form-row">
<div class="form-group">
<%= form.label :birthday %>
<%= form.date_field :birthday, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:birthday).join(', ') %>
</div>
</div>

<div class="form-group">
<%= form.label :gender %>
<div>
<%= form.radio_button :gender, 'Male' %>
<%= form.label :gender_male, 'Male' %>
<%= form.radio_button :gender, 'Female' %>
<%= form.label :gender_female, 'Female' %>
</div>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:gender).join(', ') %>
</div>
</div>
</div>
</div>

<div class="form-row">
<div class="form-group">
<%= form.label :email %>
<%= form.email_field :email, class: 'form-control' %>
<div class="form-row">
<div class="form-group">
<%= form.label :email %>
<%= form.email_field :email, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:email).join(', ') %>
</div>
</div>

<div class="form-group">
<%= form.label :phone_number %>
<%= form.text_field :phone_number, class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:phone_number).join(', ') %>
</div>
</div>
</div>

<div class="form-group">
<%= form.label :phone_number %>
<%= form.telephone_field :phone_number, class: 'form-control' %>
<%= form.label :subject %>
<%= form.select :subject, ['Math', 'Science', 'History', 'Art'], include_blank: 'Select', class: 'form-control' %>
<div class="error-message" >
<%= @registration.errors.full_messages_for(:subject).join(', ') %>
</div>
</div>
</div>

<div class="form-group">
<%= form.label :subject %>
<%= form.select :subject, ['Math', 'Science', 'History', 'Art'] %>
</div>
</div>

<div class="spacing-btn">
<%= link_to "Back", root_path, class: 'btn btn-secondary' %>
<%= form.submit 'Submit', class: 'btn btn-primary' %>
</div>
<% end %>
</div>
</div>

0 comments on commit 27cbc13

Please sign in to comment.