The following JSON primitives are supported in schema definitions. Note that null cannot be specified as a field type, but it is the default value for most types.
| Type | Description | Ruby Mapping |
|---|---|---|
object |
A key-value data construct. | Hash ({}) |
array |
An ordered sequence of objects of any type | Array ([]) |
string |
A sequence of Unicode characters | String ("") |
boolean |
A true or false value |
TrueClass or FalseClass (true, false) |
float |
A floating-point number | Float (0.1) |
null |
An empty value | NilClass (nil) |
And the following extensions are provided:
| Type | Description | Ruby Mapping |
|---|---|---|
date |
An iso8601 date stored as YYYY-MM-DD. |
Date |
datetime |
An iso8601-1:2019 combined date and time stored as YYYY-MM-DDThh:mm:ss |
DateTime |
time |
An iso8601-1:2019 time stored as hh:mm |
String (*) |
decimal |
An infinite-precision decimal object stored as a string, e.g. "3.141592653589793" |
BigDecimal |
integer |
A whole number, stored as a JSON float. |
Integer |
Defining types in your schema allows you to work directly with Ruby objects when the form is submitted to a controller. The params arrive pre-parsed in formats that match the automatic serialization that ActiveRecord performs. e.g. converting a DateTime object to JSON in Rails outputs the following:
irb(main):001:0> puts({ time: Time.now.utc }.to_json)
{"time":"2023-06-12T20:13:11.308Z"}
Note that Ruby has no native way to store a time of day without a date, so time fields are coerced to String (hh:mm) when processed into controller params.
You may find the Tod gem useful when working with these values.