我正在使用Rails 4.2.7。我想拋出一個驗證錯誤,如果用戶沒有以正確的格式輸入自己的出生場的日期,所以我有如果我的日期格式在Rails中不正確,我該如何正確顯示驗證錯誤?
def update
@user = current_user
begin
@user.dob = Date.strptime(params[:user][:dob], '%m/%d/%Y')
rescue ArgumentError => ex
end
if @user.update_attributes(user_params)
,我在我看來有這個
<%= f.text_field :dob, :value => (f.object.dob.strftime('%m/%d/%Y') if f.object.dob), :size => "20", :class => 'textField', placeholder: 'MM/DD/YYYY' %>
<% if @user.errors[:dob] %><%= @user.errors[:dob] %><% end %>
然而,即使有人輸入日期如「01-01/1985」,上述內容也不會向視圖返回驗證錯誤。我需要做什麼才能使驗證錯誤得到正確返回?
編輯:每答案的一個給定的,我試過
@user = current_user
begin
@user.dob = Date.strptime(params[:user][:dob], '%m/%d/%Y')
rescue ArgumentError => ex
puts "Setting error."
@user.errors.add(:dob, 'The birth date is not in the right format.')
end
if @user.update_attributes(user_params)
last_page_visited = session[:last_page_visited]
if !last_page_visited.nil?
session.delete(:last_page_visited)
else
flash[:success] = "Profile updated"
end
redirect_to !last_page_visited.nil? ? last_page_visited : url_for(:controller => 'races', :action => 'index') and return
else
render 'edit'
end
即使我可以看到「救市」分支叫,我不是針對我的「渲染‘編輯’」塊。
謝謝。這確實將我引導到正確的頁面,但顯示日期的文本字段(以我的問題中的「<%= f.text_field:dob」開頭的行)不包含用戶輸入的原始不正確文本。 – Dave
@Dave - 在'rescue'塊中添加'@user.dob = params [:user] [:dob]'可能會有幫助。這將爲「@ user」模型分配值。 :) – 31piy
可悲的是,「@ user.dob = params [:user] [:dob]」「不會執行任何操作,儘管」params [:user] [:dob]「中有數據,」我可以在調試中看到,在將它分配給「@ user.dob」之後,查詢「@ user.dob」不會顯示任何數據。我在想這是否與我的基礎PostGres列有類型日期有關。 – Dave