Skip to main content
Warning This document has not been updated for a while now. It may be out of date.
Last updated: 20 Jul 2021

smart-answers: Question templates

Question templates live in app/flows/<flow-name>/questions/<question-name>.erb.

Content types

The templates can contain content for any of the following keys:

:title

Used as the h1 heading and can only be text. Example:

<% text_for :title do %>
  How much milk proteins does the product contain?
<% end %>

:hint

Used as a "hint" paragraph and can be text. For money and radio questions you can also use govspeak or HTML. Example:

<% govspeak_for :hint do %>
  Examples of some fruit:

  - apple
  - orange
  - banana
<% end %>

:caption

Used as a "caption" paragraph and can only be text. Example:

<% text_for :caption do %>
  This is a caption
<% end %>

If :caption is not supplied the :title (i.e. the flow name) from the start_node is used.

:label

Used as a label (preceding the input control) for value questions. Can only be text. Example:

<% text_for :label do %>
  Hours per shift
<% end %>

Note: As of May 2020 this option may not be working correctly. Please check and amend this documentation.

:suffix_label

Valid for value questions & money questions. Can only be text. Example:

<% text_for :suffix_label do %>
  years old
<% end %>

:body

Used to generate the main content (appearing above the input control, e.g. text input element). It is valid for all questions types and can be govspeak or HTML. Example:

<% govspeak_for :body do %>
  An introduction to a question.
<% end %>

:post_body

Used to generate supplementary content (appearing below the input control). It is valid for all question types and can be govspeak or HTML. Example:

<% html_for :post_body do %>
  <p>A conclusion to a question</p>
<% end %>

:error_message

Error message for the default validation error key. Can only be text. Example:

<% text_for :error_message do %>
  Try again
<% end %>

Note you can specify error messages for a custom validation error key. These can be specified with a prefix of :error_,

Example:

<% text_for :error_for_a_specific_scenario do %>
  Try again
<% end %>

Specifying options

This is done using a call to the options method.

options(hash)

Valid for radio and checkbox question types. hash argument is a Hash of option keys (strings) and values (strings or hashes). It is used to specify the human-readable label text or hint text for each of the option keys.

Example with only label text:

<% options(
  "apple": "Apple",
  "banana": "Bananas",
  "red-grapes": "Red grapes"
) %>

Example with label text and hint text:

<% options(
  "apple": "Apple",
  "gooseberry": {
    label: "Gooseberry",
    hint_text: "These can be sour"
  },
  "red-grapes": "Red grapes"
) %>

Hiding the caption

If you need hide the caption text above the question text. This can be set using the following method:

<% hide_caption true %>

By default the caption is shown (hide_caption false).