Я новичок в этой янтарной среде, Crystal Lang и объектно-ориентированном программировании в целом. Я следовал учебным пособиям и пытался создать простую форму с использованием этой платформы
amber g scaffold item name:string path:string type:string size:float created:date
. Я вижу, что этот класс был создан в папке моделей
class Item < Granite::Base
connection pg
table items
column id : Int64, primary: true
column name : String?
column path : String?
column type : String?
column size : Float64?
column created : Time?
timestamps
end
Когда я запустил приложение и устал вставлять новый элемент, я получил эту ошибку
Создано Ожидается, что создано (Time | Nil), но получил (Float64 | String).
Это код формы .slang
== form(action: "/items/#{item.id.to_s}", method: item.id ? :patch : :post) do
== csrf_tag
.form-group
== text_field(name: "name", value: item.name, placeholder: "Name", class: "form-control")
.form-group
== text_field(name: "path", value: item.path, placeholder: "Path", class: "form-control")
.form-group
== text_field(name: "type", value: item.type, placeholder: "Type", class: "form-control")
.form-group
== text_field(name: "size", value: item.size, placeholder: "Size", class: "form-control")
.form-group
== text_field(name: "created", value: item.created, placeholder: "Created", class: "form-control")
== submit("Submit", class: "btn btn-success btn-sm")
== link_to("Back", "/items", class: "btn btn-light btn-sm")
Я предполагаю, что при вводе значения, такого как 2020-01-01 00:01:00, это обрабатывается как строка, но мне нужно, чтобы это было преобразовано в Тип времени. Я предполагаю, что это должно произойти с соответствующим файлом контроллера, но я не знаю, как это сделать.
Это код, который выполняется при попытке создать новый элемент.
def create
item = Item.new item_params.validate!
if item.save
redirect_to action: :index, flash: {"success" => "Item has been created."}
else
flash[:danger] = "Could not create Item!"
render "new.slang"
end
end
спасибо, гуррурин