# view
render 'forms/errors', form: @form
form_for @form, url: my_path do |f|
f.input
f.submit
end
# terms_controller.rb
def new
@form = build_terms_form
end
def create
@form = build_terms_form
if @form.valid?
# some code
else
# some other code
end
end
def build_terms_form
return TermsForm.new unless params[:terms_form].present?
TermsForm.new(params[:terms_form])
end
# app/forms/terms_form.rb
class TermsForm
include ActiveModel::Model
include Virtus.model
attribute :corporate_name, String
attribute :legal_representer, Boolean
validates_inclusion_of :legal_representer, in: [true], message: 'must be accepted'
validate :valid_corporate_name?
def valid_corporate_name?
errors.add(:corporate_name, 'is not a real name') unless corporate_name.size < 2
end