From 65e283c46dec1b9810ca7b3c6ff0fb48dbe7e395 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 28 Apr 2026 22:08:33 -0700 Subject: [PATCH 1/5] docs(web/guides): align Part 2 with what the model generator actually emits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tutorial described `wheels generate model Post title:string body:text` as producing "a near-empty `component extends=\"Model\"`", but the generator now ships `validatesPresenceOf("title,body")` baked in for every property the user passed in. Onboarding finding F3 — minor mismatch, but the next step asks the reader to wholesale replace the file, so they'd notice the discrepancy and wonder which version is canonical. Update the description to match what the generator emits, and call out that we drop the validations in this chapter only because Part 4 brings them back deliberately. No code change required. --- .../v4-0-0-snapshot/start-here/tutorial/02-first-model.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/sites/guides/src/content/docs/v4-0-0-snapshot/start-here/tutorial/02-first-model.mdx b/web/sites/guides/src/content/docs/v4-0-0-snapshot/start-here/tutorial/02-first-model.mdx index adae3896d..304f429c1 100644 --- a/web/sites/guides/src/content/docs/v4-0-0-snapshot/start-here/tutorial/02-first-model.mdx +++ b/web/sites/guides/src/content/docs/v4-0-0-snapshot/start-here/tutorial/02-first-model.mdx @@ -67,9 +67,9 @@ At the end of Part 1 you had a running `blog` app with a `/hello` route. There's wheels generate model Post title:string body:text ``` - That creates `app/models/Post.cfc` (a near-empty `component extends="Model"`) and a migration file under `app/migrator/migrations/` with a current timestamp. + That creates `app/models/Post.cfc` and a migration file under `app/migrator/migrations/` with a current timestamp. The generated model is short but not empty — it ships with `validatesPresenceOf("title,body")` already populated for the two columns you passed in. -2. Replace the contents of `app/models/Post.cfc` with the version below — it adds the `status` enum we'll use to filter posts: +2. Replace the contents of `app/models/Post.cfc` with the version below — we drop the auto-generated validations for now (Part 4 brings them back) and add the `status` enum we'll use to filter posts: ```cfm {test:compile} component extends="Model" { From 3c79b4a0defdf21dc5673efd12c1369a43af40cc Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 28 Apr 2026 22:09:17 -0700 Subject: [PATCH 2/5] docs(web/guides): rewrite Part 3 scaffold + form sections to match reality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two onboarding findings, both in the CRUD chapter: F4-doc — The chapter described the scaffold generator as refusing to overwrite an existing model and bailing before producing any other files. It then pivoted to having the reader hand-write the controller, views, and tests. The scaffold's actual current behavior is much friendlier: existing model + migration are skipped with a clear `skip` line, but the controller, views, and tests still get generated. The hand-written code in the chapter is also not what the scaffold emits (the generator uses `findByKey(params.key)` and Bootstrap-flavored views; the chapter uses route model binding and plain HTML). Update the Aside to describe the actual skip-and- continue behavior, mention the routes.cfm append, and frame the chapter's code as a deliberate alternative to the scaffold's default. Also: `wheels destroy` requires `--force` to actually delete files; without it, it prints a confirmation hint and exits. The chapter gave the bare command with no warning. F7 — The form partial wrapped each `textField`/`textArea`/`select`/ `dateField` helper in an outer `