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
を追加します。
実装完了!
以上のコードで、同意したかどうかをチェックボックスのバリデーションで判断することができるようになりました。