コンテンツにスキップ

Fromオブジェクト

Formオブジェクトは、通常のモデルとは切り分けてバリデーションや保存処理などを行えるデザインパターンです。複数のモデルにまたがる処理や、通常のモデルと対応しないようなフォームの処理を行うために利用されます。 FormModel クラスを継承することで、テーブルとは無関係なクラスでありながら通常のモデルと同様にattributeを持たせた上でバリデーションも行うことができます。

src/forms/myForm.ts
import { FormModel } from "accel-record";
import { attributes } from "accel-record/attributes";
import { validates } from "accel-record/validations";
class MyForm extends FormModel {
title = attributes.string();
priority = attributes.integer(3);
dueDate = attributes.date();
static validations = validates(this, [
["title", { presence: true }],
["priority", { numericality: { between: [1, 5] } }],
]);
save() {
if (this.isInvalid()) return false;
// バリデーションが成功した場合の処理
// 各値をモデルに保存するなど
// ...
return true;
}
}
// フォームの入力値を受け取る
const myFormParams = { title: "Task", priority: "2", dueDate: "2022-12-31" };
const form = MyForm.build(myFormParams);
if (form.save()) {
// 保存成功時の処理
/* ... */
} else {
// 保存失敗時の処理
const errorMessages = form.errors.fullMessages();
// エラーメッセージを表示するなど
/* ... */
}