Help us understand the problem. What is going on with this article?

新規ユーザ登録フォームの同意チェックボックス(バリデーション)を実装する

More than 3 years have passed since last update.

06377c78be37ce806f377cd52854eddd.png

Webサービスの新規ユーザ登録フォームで見かける、「同意チェックボックス」を実装します。
データベースにカラムを追加せず、validates_acceptance_ofというバリデーションを利用します。

1.View

new.html.erb
<h1>新規ユーザ登録フォーム</h1>

<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <%= form_for(@user) do |f| %>


            ...省略...


            <%= f.check_box :agreement, :as => :boolean, checked:false %>
            利用規約とプライバシーポリシーに同意する

            <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>

        <% end %>
    </div>
</div>

まず、チェックボックスを <%= f.check_box :agreement, :as => :boolean, checked:false %> という風に追加。今回は同意なので、:agreementとしました。

2. Model

user.rb
class User < ActiveRecord::Base

  validates_acceptance_of :agreement, allow_nil: false, on: :create

  ...省略...

end

バリデーションを validates_acceptance_ofというかたちで追加します。

3. Controller

users_controller.rb
  def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "登録が完了しました!"
      redirect_to @user
    else
      render 'new'
    end
  end

  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :agreement)
  end
end

取得するパラメータに :agreement を追加します。

実装完了!

https://gyazo.com/175df30e4c2c7a1e0edb01638cff4065

以上のコードで、同意したかどうかをチェックボックスのバリデーションで判断することができるようになりました。

参考

Deviseとsimple_formで会員登録するときの利用規約への同意確認 - 考えまとめノート

rkonno
iwate-pu
岩手県滝沢市にある公立大学です。Qiitaではソフトウェア情報学部生や出身の人が多いです。
https://www.iwate-pu.ac.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away