はじめに
RailsはFormとDBの連携が簡潔便利に書けますが、
今回は中間モデルやコンバータ的に使えるモデルオブジェクトを作ります。
実装
Model
models/params/hoge.rb
# models/params/hoge.rb
module Params
class HogeParam
include ActiveModel::Model
# 紐付くパラメータ群
attr_accessor :name, :category
# バリデーション定義
validates :name, presence: true
validates :category, presence: true
end
end
Controller
controllers/fugas_controller.rb
# controllers/fugas_controller.rb
class FugasController < ApplicationController
def index
# リクエストパラメータからModelを生成
@param = Params::HogeParam.new(params)
# valid?でバリデーションを実行
puts @param.valid? # => true | false
# バリデーションの結果、エラーの場合はActiveModel::Errorsが入る
puts @param.errors.messages # => {:name=>["can't be blank"]}
render formats: [:json]
end
end
参考
ActiveModel::Modelでは便利な機能が多数用意されているので、
公式リファレンスも参照ください。