An Interest In:
Web News this Week
- April 24, 2024
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
- April 18, 2024
How to Add ToS Agreement to Your Rails App using Devise?
In this article, I will show you how to add functionality to your signup view, which will make the user to agree your app's Terms of Service (ToS) when creating new account.
I am using these gems:
- Rails 6.1.4.1
- Devise 4.8
- Simple Form 5.1
- Haml 5.2
I presume that you already have Devise and your User model setup and ready to go.
STEP 1
Generate Devise registration controller with this command:
rails g devise:controllers users -c=registrations
and let your routes know about it:
# routes.rbdevise_for :users, controllers: { registrations: 'users/registrations' }
and generate your registration view, where you will add ToS agreement checkbox input:
rails g devise:views -v registrations
STEP 2
First off, you need to add new column to your database schema, with migration like this: rails g migration AddTosAgreementToUsers tos_agreement:boolean
the migration file is gonna look like this:
# 20220108144502_add_tos_agreement_to_users.rbclass AddTosAgreementToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :tos_agreement, :boolean endend
migrate the change with rails db:migrate
STEP 3
Add the following to your User model so it forces ToS agreement to be checked before allowing to successfully submit registration form. Also make sure to include on: :create
, so this checkup is not forced on when user is just updating the profile.
# users.rbvalidates_acceptance_of :tos_agreement, allow_nil: false, on: :create
STEP 4
Permit the 'tos_agreement' param
# users/registrations_controller.rb def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:tos_agreement]) end
STEP 5
Add the checkbox input to your registration form. I use link_to method to insert a link leading to my pre-created ToS page.
# app/views/devise/registrations/new.html.haml= f.input :tos_agreement, as: :boolean, label: "I agree to #{link_to 'Terms of Service', terms_of_service_path, target: '_blank'}".html_safe
That's it, now you should have a nice functionality that will force your app users to agree to your terms before creating new account.
Original Link: https://dev.to/zilton7/how-to-add-tos-agreement-to-your-rails-app-using-devise-9ck
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To