Ruby on RailsのFormが単体のモデルに依存しないような場合や、フォーム専用の特別な処理をモデルに書くべきではないといった場合はForm Class(Form Object)を作る手法があります。合わせてオリジナルのフォームビルダを作成してViewへのロジックの記述量を減らす手法を紹介します。
defregister if valid? # バリデーションを通過した後の処理を記述 # - Userの作成 # - メール通知 # -ロギング... end end
private
defcreate_user # ... end end
Controller側には通常のモデルと同じように扱います。
# app/controllers/registration_controller.rb classRegistrationController < ApplicationController defnew @registration = Form::Registration.new end
defcreate @registration = Form::Registration.new(registration_params) if @registration.register redirect_to registration_path(@registration) else render :new end end