Я пытаюсь добавить time_select
с помощью include_blank
. Я делаю это:
<%= f.time_select :start_at, include_blank: true, ampm: true %><br>
Что я хотел бы сделать, так это удалить значение (save nil?), если в представлении выбрано пустое.
Хотя я пробовал следующие сообщения, это не сработало для меня.
time_select пустое поле сохраняет время по умолчанию при отправке формы
Необязательный параметр time_select с параметрами allow_blank по умолчанию 00:00
1) Когда я пытаюсь, как показано ниже, ошибка не появляется, но 00:00:00
сохраняется.
контроллер
def update
@event = Event.find(params[:id])
if event_params["start_at(4i)"].blank? or event_params["start_at(5i)"].blank?
@event.start_at = nil
end
if @event.update(event_params)
flash[:success] = "event updated!"
redirect_to root_url
else
render 'edit'
end
end
2) Когда я пытаюсь как ниже (изменить предложение), ошибка не появляется, но 00:00:00
сохраняется.
контроллер
def update
@event = Event.find(params[:id])
if params[:id]["start_at(4i)"].blank? or params[:id]["start_at(5i)"].blank?
@event.start_at = nil
end
if @event.update(event_params)
flash[:success] = "event updated!"
redirect_to root_url
else
render 'edit'
end
end
3) Когда я пытаюсь как показано ниже (add before_action), ошибка не появляется, но 00:00:00
сохраняется.
контроллер
before_action :blank_time, only: [:update]
def update
@event = Event.find(params[:id])
if @event.update(event_params)
flash[:success] = "event updated!"
redirect_to root_url
else
render 'edit'
end
end
private
def blank_time
if params[:id]["start_at(4i)"].blank? or params[:id]["start_at(5i)"].blank?
params[:id]['start_at(1i)'] = ""
params[:id]["start_at(2i)"] = ""
params[:id]["start_at(3i)"] = ""
params[:id]["start_at(4i)"] = ""
params[:id]["start_at(5i)"] = ""
end
end
4) Когда я попробую, как показано ниже (используйте nil
вместо ""
), появится ошибка.
Ошибка
IndexError (string not matched):
app/controllers/events_controller.rb:106:in `[]='
app/controllers/events_controller.rb:106:in `blank_time'
контроллер
before_action :blank_time, only: [:update]
def update
@event = Event.find(params[:id])
if @event.update(event_params)
flash[:success] = "event updated!"
redirect_to root_url
else
render 'edit'
end
end
private
def blank_time
if params[:id]["start_at(4i)"].blank? or params[:id]["start_at(5i)"].blank?
params[:id]['start_at(1i)'] = nil
params[:id]["start_at(2i)"] = nil
params[:id]["start_at(3i)"] = nil
params[:id]["start_at(4i)"] = nil
params[:id]["start_at(5i)"] = nil
end
end
Было бы хорошо, если бы вы могли дать мне какие-либо советы.
UPDATE
Хотя я изменяю редактирование в events_controller.rb
, как показано ниже, отображается ошибка ActiveModel::MissingAttributeError (can't write unknown attribute 'start_at(4i)'):
.
def edit
@room = Room.find(params[:room_id])
@event = @room.events.find(params[:id])
@event['start_at(4i)'] = @event.start_at.split(':')[0] #the error occur here
@event['start_at(5i)'] = @event.start_at.split(':')[1]
end