Ruby on rails 如何更改内置的默认日期\u选择Rails中无效日期的通知消息?
我正在Rails中为我的表单使用Ruby on rails 如何更改内置的默认日期\u选择Rails中无效日期的通知消息?,ruby-on-rails,ruby,rubygems,ruby-on-rails-5,Ruby On Rails,Ruby,Rubygems,Ruby On Rails 5,我正在Rails中为我的表单使用date\u select方法 每当我选择一个无效日期,如2月30日或4月31日,我都会收到一条默认通知消息,上面写着“无效日期”,我相信这是内置的 我如何将其更改为“您输入的日期无效”之类的自定义内容 我希望此消息与我的应用程序其余部分中的大小写和标点符号保持一致。每当转换时间失败时,Rails就会用核心消息“无效日期”引发ArgumentError(扩展时区和时间计算) 但在您的情况下,我们不需要截取或重写模型/控制器中的任何代码,只需在呈现“无效日期”消息(
date\u select
方法
每当我选择一个无效日期,如2月30日或4月31日,我都会收到一条默认通知消息,上面写着“无效日期”,我相信这是内置的
我如何将其更改为“您输入的日期无效”之类的自定义内容
我希望此消息与我的应用程序其余部分中的大小写和标点符号保持一致。每当转换时间失败时,Rails就会用核心消息“无效日期”引发ArgumentError(扩展时区和时间计算) 但在您的情况下,我们不需要截取或重写模型/控制器中的任何代码,只需在呈现“无效日期”消息(或您想要的任何消息)之前使用帮助器方法转换它们,对吗
# helper
def format_error(error)
return ArgumentError.new(I18n.t 'date.invalid') if error.class == ArgumentError && error.message == 'invalid date'
error
end
# view
<% interval.errors.full_messages.each do |message| %>
<li><%= format_error(message) %></li>
<% end %>
#助手
def格式_错误(错误)
如果error.class==ArgumentError&&error.message==invalid date,则返回ArgumentError.new(I18n.t'date.invalid')
错误
结束
#看法
顺便问一下,您使用的是什么版本的Rails?我使用Rails 6,当我选择错误的日期时,它将自动转换为下一个有效日期,例如:我选择31/4->然后它将保存为1/5。从何处获取消息?这是模型级验证吗?我们需要上下文代码。我不完全确定这条消息来自哪里。我假设它内置在
date\u选择中,用于无效的日期组合,因为我没有编写此代码。如果我猜,这一定是模型级验证,当我尝试提交带有无效日期的表单时,flash notice消息会出现在我的视图上。请提供表单代码和模型不确定它的相关性,但在此处添加,错误消息是如何显示的?它看起来像默认的Rails错误消息还是来自浏览器的消息?您是否使用可能创建该消息的前端库(javascript)?我真的认为这会起作用,但不幸的是,我仍然收到原始的“无效日期”消息。我使用的是Rails 6.0.3.6。在这种情况下,我认为在您的代码中(可能您覆盖了ActiveRecord保存/更新,是吗?)有些地方直接抛出ArgumentError,“无效日期”,而不添加到ActiveModel.errors
。(例如:您可以通过添加一行代码“31/04/2021.”来进行测试。在这种情况下,您需要在begin中包装代码。。rescue=>error,然后格式化该错误,然后添加到您的ActiveModel.errors
。是的,这正是我最终要做的!你的评论肯定让我走上了正确的道路