我正在嘗試將time_select
與include_blank
相加。我這樣做:Rails:如何不使用time_select節省價值
<%= f.time_select :start_at, include_blank: true, ampm: true %><br>
如果在視圖中選擇空白,我想要做的是刪除值(保存爲零?)。
雖然我嘗試了以下帖子,但它並沒有爲我工作。
time_select blank field saves a default time when form is submitted
Optional time_select with allow_blank defaults to 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)當我嘗試如下(其他城市if語句),沒有錯誤出現,但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)當我嘗試如下(添加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
感謝您的快速反應,@Ivan。雖然我還沒有充分理解你的答案,但是當我嘗試時會顯示以下錯誤。 'NoMethodError(未定義方法'拒絕'nil:NilClass):'。並且在'def update'中添加代碼是否正確? – SamuraiBlue
是的,您應該刪除您的before_action並將其添加到更新方法(在第一個示例的if空白子句中)。 – Ivan
我編輯了答案以顯示完整的方法。 – Ivan