Я создаю форму, в которой пользователи могут вводить длительность в виде строки, например «08:00» или «3:10». Моя идея состояла в том, чтобы преобразовать это в правильное количество секунд в before_validation
обратном вызове.
Но почему-то Rails что-то делает перед обратным вызовом, поскольку значение всегда равно "0"
, когда пользователь вводит "08:00"
или "3"
, когда пользователь вводит "3:10"
.
В моей форме ничего не издевается;
<%= f.text_field :duration, required: true, class: 'input' %>
в моем контроллере;
def create
@entry = Entry.new entry_params
end
private
def entry_params
params.require(:entry).permit(:date, :duration, :project_id)
end
Или в моей модели;
class Entry < ApplicationRecord
belongs_to :project
validates :duration, presence: true
before_validation :normalize_duration
def duration_formatted(format = '%H:%M')
Time.at(duration).utc.strftime format
end
private
def normalize_duration
# Always receiving the first character here :(
p self.inspect
end
end