Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 13, 2022 02:15 pm GMT

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.
Terms of Service Checkbox Preview

# 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

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To