Fromオブジェクト
Formオブジェクトは、通常のモデルとは切り分けてバリデーションや保存処理などを行えるデザインパターンです。複数のモデルにまたがる処理や、通常のモデルと対応しないようなフォームの処理を行うために利用されます。
FormModel
クラスを継承することで、テーブルとは無関係なクラスでありながら通常のモデルと同様にattributeを持たせた上でバリデーションも行うことができます。
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(); // エラーメッセージを表示するなど /* ... */}