webサービスを登録する際に利用規約同意したかどうかにチェックを入れて登録するフォームをよく見かけると思います。railsのdeviseでユーザー登録を実装している際の実装手順をまとめました。
やりたいこと
- rails
- deviseでユーザー登録
- ユーザー登録時に利用規約の同意にチェックマーク
- チェックが入っていないと弾く
- dbには保存しない
環境
ruby 3.2.2
rails 7.0.8
model
validates_acceptance_of :agreement_terms, allow_nil: false, on: :create
user modelに上記を追記。validates_acceptance_ofメソッドは、指定された属性が特定の条件を満たしているかどうかを検証するために使用されます。この場合、:agreement_terms属性がnilでないこと、および:createアクションでのみ検証が行われることが指定されています。
form
<%= f.check_box :agreement_terms, :as => :boolean, checked:false, class: "checkbox_check" %>
<a href="/kiyaku" class="link_color">利用規約</a>と<a href="/privacy" class="link_color">プライバシーポリシー</a>に同意します。
checkboxを実装
パラメーターを渡せるように
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:agreement_terms])
end
deviseで実装している場合、新しいパラメーターをuser作成時に渡したい場合は上記のdevise_parameter_sanitizer.permitで設定しないといけない。